2014-08-28 154 views
0

我遇到了有趣的意圖工作流程處理。 我創建了一個通知如下:Android onCreate()未通知通知

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
     .setSmallIcon(R.drawable.abc_textfield_search_default_holo_dark).setContentTitle("Мероприятие изменилось") 
     .setContentText(eventToShow.valueAt(i).name + " " + eventToShow.valueAt(i).date).setAutoCancel(true); 
    Intent resultIntent = new Intent(context, MainActivity.class); 
    resultIntent.putExtra(MainActivity.NOTIFICATION_EVENT_DISPLAY, eventToShow.valueAt(i).id); 
    PendingIntent resultPendingIntent = PendingIntent.getActivity(context,0,resultIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
    mBuilder.setContentIntent(resultPendingIntent); 
    NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotifyMgr.notify(eventToShow.valueAt(i).id, mBuilder.build()); 

當notificataion被趕到的用戶,我想到的是,當他點擊它MainActivity.class會處理這個意圖。 我在MainActivity.onCreate()內處理有關意向的信息。

如果我點擊我的應用程序外部的通知,一切都會好的。活動正確處理這個意圖並顯示我的預期。

但是當我點擊通知裏面我的應用程序沒有新的instanse我的MainActivity.classonCreate()不是射擊。我認爲它會被創建新的實例MainActivity.class

你能解釋我這是一個默認的行爲,我應該如何處理這種情況?

測試我的應用後,我找到下一個。主動 - >獲取通知 - >關閉應用程序 - >打開應用程序(MainActivity) - >按通知 - >通知按預期打開MainActivity的新實例。

二)MainActivity - >得到通知 - >按通知 - >任何反應

+0

嘗試與其他標誌未決的意圖,也許PendingIntent.FLAG_CANCEL_CURRENT 或者你可以在意向Intent.FLAG_ACTIVITY_NEW_TASK設置標誌。這應該在創建時觸發。 – 2014-08-28 08:41:48

+0

你可以用'getIntent()'在'onResume()'中獲得'intent'嗎? – 2014-08-28 08:44:35

+0

@BobanS。嘗試了這兩個想法,但'Activity.onCreate()'不是射擊。 – Anatol 2014-08-28 08:46:06

回答

1

所以我研究約一天來修復錯誤,在這裏我找到了。 我確定Android任務系統可以讓你頭疼。 看來,如果Android決定從non-Activity context 調用您的意圖,它可以用新的意圖替代。

startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK

intent將取代原來的intent,你不會趕你插入到任何數據。

你可以做下一步,以防止這種情況。在你的活動,你應該Override下一個方法:

@Override 
public void onNewIntent(Intent intent) { 
int eventId = intent.getIntExtra(MainActivity.NOTIFICATION_EVENT_DISPLAY, -1); 
} 

現在你可以處理這個數據