Lea*_* 86 12 java android android-notifications
我的应用程序创建一个通知,其中包含用户可以选择的两个操作。选择任一操作后,我希望自动消除通知。到目前为止,我通过在BroadcastReceiver的onReceive结束时实现了这一点:
Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(it);
NotificationManagerCompat.from(context.getApplicationContext()).cancelAll();
Run Code Online (Sandbox Code Playgroud)
更新到 Android 12 后,通知不再关闭。相反,我遇到了这个错误:
java.lang.SecurityException:权限拒绝: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 那样关闭面板,以供将来参考。
小智 5
ACTION_CLOSE_SYSTEM_DIALOGS适用于系统和预装应用程序。需要签名许可。
AccessibilityService.GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE 是一种矫枉过正。就像,“给我你家的钥匙,这样我就可以清理你学校旁边的垃圾。”
StatusBarManagercollapsePanels()是隐藏的API。你必须使用双重反射才能使用它(AndroidStudio足够聪明,可以看穿简单的反射)。不适合我。它抛出异常,但被反射隐藏。
抱歉,我无法给您解决方案,但至少我给了您我搜索但失败的地方。
| 归档时间: |
|
| 查看次数: |
8734 次 |
| 最近记录: |