【问题标题】:Multiple fullscreen android notifications at the same time not stacking多个全屏android通知同时不堆叠
【发布时间】:2017-01-18 17:18:30
【问题描述】:

我正在开发一个具有类似闹钟功能的 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 开始其活动,然后当该活动完成时,显示下一个。我相信我想建立一个任务堆栈,并将这些警报意图推送到它上面。然而,这对我来说是全新的。

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

【问题讨论】:

    标签: android android-intent notifications android-pendingintent


    【解决方案1】:

    如果您使用全屏Intent 功能,则根本不需要使用IntentServiceNotification。只需让AlarmManager 在触发时启动您的Activity

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

    【讨论】:

    • 嗨,大卫,感谢您的回复。使用 Intent 服务的原因是使用全屏 Intent 是用户可选功能。这将是实施它的正确方法吗?我仍然希望他们收到通知,而不是屏幕唤醒。
    • 如果您愿意,您仍然可以使用Notification,但无论哪种情况,该解决方案都应该有效。 Notification 应该启动 Activity 如果屏幕上已经有警报,则应该排队警报。
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多