2016-12-23 125 views
1

我用下面的代碼(科特林)覆蓋意圖額外

val builder = NotificationCompat.Builder(ctx) 
      ........ 
     .setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>() 
      .putExtra("id", member.id) 
      .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0)) 

所以,當通知被竊聽MainActivity將選擇用戶創建的通知,從通知到了。

override fun onNewIntent(intent: Intent?) { 
    val id = intent?.getStringExtra("id") ?: return 
    selectUser(extra) 
} 

我發送來自2個不同用戶的2個通知。點擊第一次通知後,它工作正確(id == _ User1UUID)並選擇用戶。然後我按回來,從第二個用戶發送另一個通知,點擊它並意圖仍然包含以前的用戶ID並選擇它(通過斷點檢查)。

我知道,這是因爲FLAG_ACTIVITY_REORDER_TO_FRONT,但我必須只保留MainActivity的一個實例。

+0

把 '機器人:launchMode = 「singleTask」' 屬性 在活動AndroidManifest文件。 –

+0

欲瞭解更多信息 - [鏈接] https://developer.android.com/guide/components/activities/tasks-and-back-stack.html –

+0

@ keyur9779我已經有這在清單,但不是這個標誌還需要嗎? –

回答

0

你可能遇到的問題給出的代碼是你AREN不會產生獨特的PendingIntent s。如果您針對不同用戶提供了2條通知,則它們都將使用相同的PendingIntent,因此您會在兩者中看到相同的id

,創造出獨特PendingIntent S,改變這種:

.setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent<MainActivity>() 
     .putExtra("id", member.id) 
     .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0)) 

這樣:

int randomNumber = ... // Use some random number here, or use your "id" if your "id" can be converted to an integer here. 
         // This random number needs to be unique for each Notification you create. 

.setContentIntent(PendingIntent.getActivity(ctx, randomNumber, ctx.newIntent<MainActivity>() 
     .putExtra("id", member.id) 
     .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), u)) 
1

你確實需要給定的代碼,使獨特

notificationManager.notify((int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE) /* ID of notification */, notificationBuilder.build()); 

每個通知,如果你已經沒有這個再試試下面

Intent intent = new Intent(this, MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
         PendingIntent.FLAG_ONE_SHOT); 
+0

我的通知是獨一無二的,他們已經擁有了不同的ID –

+0

盡我更新的答案 –

+0

我只是刪除'FLAG_ACTIVITY_REORDER_TO_FRONT'它的工作原理,但感謝嘗試幫助 –