如何在android中完成IntentService中的活动?

时间:2015-12-26 14:35:53

标签: android google-cloud-messaging android-intentservice

我正在使用GCMIntentService类扩展IntentService以获取通知,同时单击通知我可以启动我的活动。它的工作,但我无法完成我的活动所以我面临后按钮按下问题。

*代码*

Intent resultIntent = new Intent(this, MainActivity.class);
        resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        // Set pending intent
        mNotifyBuilder.setContentIntent(resultPendingIntent);

在此代码中,启动MainActivity并按下后退按钮两次,只有它存在于应用程序中,因为我无法完成通知点击中的活动。所以请帮我完成GCMIntentService类中的活动。

2 个答案:

答案 0 :(得分:1)

  

因此,请帮助我完成GCMIntentService类中的活动。

这不是正确的答案。你想要的是确保任务对用户有意义,就后台堆栈而言。根据您应用的导航,可能需要在resultIntent中添加以下标记之一:

  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT(如果您希望在后台堆栈上保留其他活动,但确保只有一个MainActivity实例)

  • Intent.FLAG_ACTIVITY_CLEAR_TASK Intent.FLAG_ACTIVITY_NEW_TASK(如果您希望为此Notification处理设置单独的专用任务,只留下任何现有任务;还需要清单中android:taskAffinity=""元素中的<activity>

答案 1 :(得分:0)

在您的活动创建中或随时,您将注册自定义广播接收器:

registerReceiver(closeMyActivity, new IntentFilter("ex.my_app_name.my_custom_broadcast"));

这是您收到自定义广播以关闭活动的地方。

private final BroadcastReceiver closeMyActivity = new BroadcastReceiver() 
            {
                @Override
                public void onReceive(Context context, Intent intent) 
                {
                    if (null != intent && intent.hasExtra("aCloseActivity")) {
                        if(intent.getBooleanExtra("aCloseActivity", false)){
                         // Here you can close your activity                                 
                         }
                     }
                }
            };

不要忘记在活动被销毁时取消注册广播接收器:

unregisterReceiver(closeMyActivity);

从您的服务发送广播:

getApplicationContext().sendBroadcast(new Intent("ex.my_app_name.my_custom_broadcast").putExtra("aCloseActivity", true));

我希望它有所帮助,但也等待其他回复,也许有更好的解决方案。