我的应用程序创建了一个通知,其中包含两个用户可以选择的操作。在选择其中任何一个操作后,我希望通知自动消失。到目前为止,我通过在我的BroadcastReceiver的onReceive的结尾处添加以下代码来实现这一功能:
在升级到Android 12后,通知不再被关闭。相反,出现以下错误:
Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(it);
NotificationManagerCompat.from(context.getApplicationContext()).cancelAll();
在升级到Android 12后,通知不再被关闭。相反,出现以下错误:
尽管添加了该权限也没有效果。通过搜索我发现,ACTION_CLOSE_SYSTEM_DIALOGS 已被弃用,唯一的官方替代方案似乎是 AccessibilityService,但我没有找到任何示例。所以我的问题是:现在关闭通知的最佳方法是什么?如果确实是通过 AccessibilityService,那么该如何操作呢?java.lang.SecurityException: Permission Denial:android.intent.action.CLOSE_SYSTEM_DIALOGS 广播来自 (…) 需要 android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS 权限。原因:android.os.RemoteException
编辑:现在我意识到我在原始代码中做了两件不同的事情:关闭通知面板和解除通知。最后一个部分(cancelAll)已经满足了我的需求,而且它还可以在没有其他应用程序的通知时关闭面板。但是需要注意的是,当仍有另一个通知在托盘中时,仍然无法像 ACTION_CLOSE_SYSTEM_DIALOGS 那样关闭面板。
ACTION_CLOSE_SYSTEM_DIALOGS
,只需在NotificationManager
或NotificationManagerCompat
上使用cancel()
或cancelAll()
。 - CommonsWare