2015-12-26 54 views
0

我正在使用GCMIntentService類擴展IntentService獲取通知,同時單擊通知我可以啓動我的活動。它的工作,但我不能完成我的活動,所以我面臨後退按鈕按下問題。如何在Android中完成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類中的活動。

+0

我首先想到的是,我並不是說這是最好的解決方案,請在您的活動中註冊廣播接收器(自定義的接收器僅由您的活動確認),並從您的服務中註冊想要關閉你的活動)用這個定製意圖進行廣播。收到這個意圖後關閉你的活動。 –

+0

請給出任何想法和參考。 –

+0

我要在這裏添加一個代碼作爲答案,我現在將它從我的項目中解脫出來。 –

回答

1

請幫助我如何完成GCMIntentService類中的活動。

這不是正確的答案。你想要的是確保該任務對於用戶來說是有意義的,就後退堆棧而言。根據您的應用程序的導航,可能涉及添加以下組標誌之一,您resultIntent

  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT(如果你想保持背部堆棧上的其他活動,但要確保只有一個實例的MainActivity

  • Intent.FLAG_ACTIVITY_CLEAR_TASKIntent.FLAG_ACTIVITY_NEW_TASK(如果你想擁有這個Notification處理一個單獨的專用任務,只留下任何現有的任務,這也需要android:taskAffinity=""<activity>元素i n中的清單)

+0

在您給出的答案上面我嘗試過但沒有輸出 –

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)); 

我希望它有幫助,但也等待看到其他答覆,也許有一個bette r解決方案。