2016-05-09 64 views
0

當應用程序收到來自GCM的消息時,它會顯示通知。單擊通知後無法重新啓動活動

 Intent intent = new Intent(this, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_event_white_24dp) 
      .setContentTitle("TheBriefPost") 
      .setContentText(message) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 

當我點擊通知時,應用程序會打開活動但不會重新啓動。問題是什麼?如何解決它?

回答

0

應用打開活動,但不是重新啓動

它不應該被重新啓動。 FLAG_ACTIVITY_SINGLE_TOP是「如果設置了,如果它已經在歷史堆棧頂部運行,則活動將不會啓動。

爲什麼要重新啓動它?處理意向數據?如果是這樣,請在您的活動中實施onNewIntent()

+0

我正在向設備發送GCM消息,以通知「新事件可用」。如果用戶單擊,則應重新啓動活動,以便從頭開始加載數據。這就是爲什麼我需要重新開始活動。無論如何要做到這一點? –

1

答案應該是與意圖有關的標誌/掛起意圖

根據PendingIntent in Official Docs 在掛起的意圖,你發送一個標誌PendingIntent.FLAG_UPDATE_CURRENT

標誌,指示,如果所描述的PendingIntent已經存在,然後保留它,但用新的意圖替換它的額外數據。

我在你的情況下猜你需要使用PendingIntent.FLAG_CANCEL_CURRENT

標誌,指示,如果所描述的PendingIntent已經存在,當前一要產生一個新的前取消。

Accodring到Activity in Official Docs 在活動設置了標誌Intent.FLAG_ACTIVITY_SINGLE_TOP

如果設置,活動將不被它是否已經在歷史堆棧的頂部運行啓動。

我想在這裏你需要使用Intent.FLAG_ACTIVITY_CLEAR_TASK

如果傳遞給Context.startActivity()的意圖設置,該標誌將導致將與活動相關的任何現有任務在活動開始前清除。