启动应用程序时,Android 通知保持打开状态
Posted
技术标签:
【中文标题】启动应用程序时,Android 通知保持打开状态【英文标题】:Android notification stays open when launching app 【发布时间】:2015-04-07 16:49:54 【问题描述】:我可以通过 AlarmManager 排队和启动通知,我还可以在单击通知时启动我的应用程序。不幸的是,当应用程序启动时,通知并没有自行删除。
通知设置:
Intent intent = new Intent(mainActivity, NotificationPublisher.class);
intent.setAction("handle");
PendingIntent pIntent = PendingIntent.getBroadcast(mainActivity, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
Notification.Builder builder = new Notification.Builder(mainActivity)
.setSmallIcon(R.drawable.phone)
.setContentTitle(title)
.setContentText(textContent)
.setAutoCancel(true)
.setContentIntent(pIntent);
return builder.getNotification();
通知点击播放并点击此功能:
void handle(Context context, Intent intent)
System.out.println("handle");
Context mainContext = Extension.mainContext;
Activity mainActivity = Extension.mainActivity;
Intent launchIntent = new Intent(mainContext, mainActivity.getClass());
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchIntent);
handle 函数将启动活动,但不会从状态栏中删除通知。有趣的是...如果我删除对 startActivity 的调用,通知将关闭。
我尝试过的事情:
手动设置自动取消标志 改用 builder.build() NotificationManger cancel(id) 和/或 cancelAll 使用 NotificationCompat.Builder 对 setContentIntent 使用常规启动意图,而不是手动调用 startActivity【问题讨论】:
您可以通过在设备上“手动”关闭它来删除它吗? 是的,定期刷卡没有问题。 只是为了交叉检查,您在执行cancel (int id)
时是否使用了相同的通知ID?我想有 4 种方法可以删除任何通知: 1. 用户关闭它 2. setAutocancel 3. cancel (int id)
和 cancelALL
我猜你没有使用 Notification.FLAG_ONGOING_EVENT
标志..对吗?只有一个建议:尝试从您的 handle
方法中使用 cancel (int id)
以显式删除它
我使用了 notificationManager.notify(0, notification);使用 notificationManager.cancel(0)。它似乎没有做任何事情。我也试过cancelAll。用户关闭它总是有效的,并且在构建器中设置了自动取消。我没有使用 FLAG_ONGOING_EVENT。我也尝试过 setOngoing(false) 以确保我没有添加它。
【参考方案1】:
根据您的问题中的这个陈述:
有趣的是...如果我删除对 startActivity 的调用, 通知将关闭。
我假设您的Activity
只是转发Notification
。
【讨论】:
我修改了通知,改为启动一个没有通知的单独应用程序。问题仍然存在,因此这不是我的答案。 好的。根据您所有的 cmets,这些都没有任何意义。所以显然有一些时髦的事情正在发生。很难远程调试。祝你好运!如果您弄明白了,请告诉我们。 嘿大卫!昨晚有了大突破!我正在使用一种叫做 OpenFL 的东西来构建应用程序。我正在使用名为 (PiratePig) 的示例项目。当我进行与您的评论相关的测试时,我创建了一个名为 VanillaPiratePig 的不同应用程序。 PiratePig 会发出通知,然后 VanillaPiratePig 会被打开。然而,昨晚我尝试打开 gmail 应用程序并没有发生错误。因此,我很确定这是一个性能错误。因为 OpenFL 应用程序在启动负责取消排队通知的 android OS 类时相当笨重,因此没有时间片。【参考方案2】:我通过在单击通知后 300 毫秒启动我的应用程序来解决此问题。
【讨论】:
以上是关于启动应用程序时,Android 通知保持打开状态的主要内容,如果未能解决你的问题,请参考以下文章
设备重新启动后,地理围栏是不是在 android 中保持活动状态
Android状态栏通知:使其无法清除并返回应用程序(不启动新实例)
Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)