【发布时间】:2022-06-10 20:16:10
【问题描述】:
我的应用会创建一个通知,其中包含用户可以选择的两个操作。 选择任一操作后,我希望自动关闭通知。到目前为止,我通过在我的 BroadcastReceiver 的 onReceive 结束时实现了这一点:
Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(it);
NotificationManagerCompat.from(context.getApplicationContext()).cancelAll();
更新到 Android 12 后,通知不再关闭。相反,我遇到了这个错误:
java.lang.SecurityException: Permission Denial: android.intent.action.CLOSE_SYSTEM_DIALOGS 从 (...) 广播需要 android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS.. 原因:android.os.RemoteException
添加该权限没有任何效果。谷歌搜索我发现 ACTION_CLOSE_SYSTEM_DIALOGS 已被弃用,唯一的官方替代品似乎是 AccessibilityService,尽管我没有找到任何例子。所以我的问题是:现在关闭通知的最佳方式是什么?如果确实是通过AccessibilityService,怎么办?
编辑:现在我意识到我在原始代码中做了两件不同的事情:关闭通知面板和关闭通知。最后一部分(cancelAll)足以满足我的需要,当没有其他通知(来自其他应用程序)时,它也会关闭面板。但是,重要的是要注意,当托盘中还有另一个通知时,仍然无法关闭面板以供将来参考,就像 ACTION_CLOSE_SYSTEM_DIALOGS 所做的那样。
【问题讨论】:
-
去掉
ACTION_CLOSE_SYSTEM_DIALOGS,只在NotificationManager或NotificationManagerCompat上使用cancel()或cancelAll()。 -
@CommonsWare 做到了!毕竟我只需要cancelAll。谢谢!
-
问题是你的通知什么时候需要粘性
标签: java android android-notifications