Android:管理多个通知

Cha*_*ani 9 java android

我正在尝试在我的应用程序中创建多个通知.为了唯一地识别每个通知,我给了他们一个唯一的identifyId.以下是我的代码:

private void updateNotification(int notificationId, int clockStatusID, CharSequence text) {
 //notificationManager.cancel(notificationId);
// throws up an ongoing notification that the timer is running
Log.i("TIMERCOUNT", "Notification id: " + notificationId);
Notification not = new Notification(clockStatusID, // the
    // icon
    // for
    // the
    // status
    // bar
    text, // the text to display in the ticker
    System.currentTimeMillis() // the timestamp for the
    // notification to appear
);
Intent intent = new Intent();
intent.putExtra("notificationID", notificationId);
intent.setAction("actionstring" + System.currentTimeMillis());
intent.setClassName("com.chander.time.android.activities",
"com.chander.time.android.activities.Tabs");


not.setLatestEventInfo(self,
    getText(R.string.timer_notification_title),
    getText(R.string.timer_on_notification_text), PendingIntent
    .getActivity(this, 0, intent,
        PendingIntent.FLAG_UPDATE_CURRENT));

not.flags += Notification.FLAG_ONGOING_EVENT;
not.flags += Notification.FLAG_NO_CLEAR;
notificationManager.notify(notificationId, not);
}
Run Code Online (Sandbox Code Playgroud)

问题:选择通知时,会调用Tabs活动传递意图.我想访问在选项卡中选择的通知的唯一notificationId.我尝试使用intent.putExtra()将notificationId保存在intent中.但是,对于多个通知,它会覆盖notificationId并返回最新的通知.我不明白为什么会发生这种情况,我怎么能避免覆盖notificationId.

谢谢,Chander

Cha*_*ani 15

我得到了答案.意图被缓存.要创建新意图,只需添加以下代码:

saveCallIntent.setData((Uri.parse("custom://"+System.currentTimeMillis())));
Run Code Online (Sandbox Code Playgroud)

这使得意图独特.

此外,有人建议我使用以下代码来使意图独特:

saveCallIntent.setAction("actionstring" + System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)

它没有帮助我,但可能对其他人有所帮助.

--Chander


小智 7

只需将notificationId0替换为0 pendingIntent.

PendingIntent.getActivity(this, notificationId, intent,PendingIntent.FLAG_UPDATE_CURRENT));
Run Code Online (Sandbox Code Playgroud)

用户还必须将以下代码与上面的代码一起更新以使其正常工作.

 mNotificationManager.notify(notificationId, mBuilder.build());
Run Code Online (Sandbox Code Playgroud)