多个全屏安卓通知同时不堆叠

时间:2017-01-18 17:18:31

标签: android android-intent notifications android-pendingintent

我正在开发一个具有闹钟功能的android项目。

我为每个警报实例安排一个intentService(例如,在晚上9点触发)。此intentService构建通知并显示它。通知包括fullScreenIntent,它按预期工作并启动活动。我使用以下代码执行此操作:

alarmActivityIntent = new Intent(this, AlarmActivity.class);
PendingIntent alarmActivityPendingIntent = PendingIntent.getActivity(this, alertSchedule.getIntentId(), alarmActivityIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mBuilder.setFullScreenIntent(alarmActivityPendingIntent, true);
Notification mNotification = mBuilder.build();
mNotificationManager.notify(alertSchedule.getIntentId(), mNotification);

当只有一个警报设置为在特定时间触发时,这可以正常工作,但是如果两个警报设置为在特定时间触发行为更改。

我希望第一个fullScreenIntent启动它的活动,然后当该活动完成时,显示下一个活动。我相信我想建立一个任务堆栈,并将这些警报意图推送到它上面。然而,这对我来说是全新的。

是否可以对这些通知进行分组?

1 个答案:

答案 0 :(得分:0)

如果您使用全屏Intent功能,则根本不需要使用IntentServiceNotification。只需让AlarmManager在发生时Activity开始。

您不想构建任务堆栈,这太复杂了。如果您有多个可同时触发的闹钟,则AlarmManager每次都可以启动相同的Activity。将此Activity的启动模式设置为singleTop(在清单中),这样如果警报触发时Activity已经显示,则不会创建{Activity的另一个实例1}}位于现有的{1}}之上,而是通过在Intent的现有实例上调用onNewIntent()来传递Activity。在onNewIntent()中,您可以将Intent的数据(附加内容)保存在用户完成当前显示的Activity时将处理的队列中。要做到这一点,只需覆盖onBackPressed(),这样当用户按下BACK按钮完成当前Activity时,您可以检查队列中是否还有其他警报等待。如果没有,您只需致电super.onBackPressed()即可完成Activity。如果队列中有任何内容,您可以删除队列中的第一个元素并在Activity中显示该元素。继续这样做,直到队列为空。