Android 12中调用ACTION_CLOSE_SYSTEM_DIALOGS广播权限被拒问题求助
Android 12中ACTION_CLOSE_SYSTEM_DIALOGS权限拒绝问题解决方法
在Android 11及以下版本,你可以通过发送Intent.ACTION_CLOSE_SYSTEM_DIALOGS广播关闭通知栏,但Android 12开始对该广播添加了权限限制,普通第三方应用无法再发送此广播,因此会抛出权限拒绝异常。以下是可行的替代方案:
方案一:使用WindowInsetsController控制系统栏
Android 11及以上官方推荐用WindowInsetsController来管理系统栏的显示状态,代码示例:
// 获取当前Activity的Window实例 val window = activity.window // 获取WindowInsetsController val insetsController = window.insetsController // 仅隐藏状态栏(通知栏) insetsController?.hide(WindowInsets.Type.statusBars()) // 如果需要同时隐藏导航栏,可使用: // insetsController?.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
注意:此方法需要在Activity上下文下调用,因为要操作对应Window的Insets。
方案二:模拟返回键事件
通知栏展开时,按下返回键会自动收起,因此可以通过模拟返回键事件实现需求:
// 模拟返回键按下和抬起事件 activity.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)) activity.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK))
此方法要求你的应用处于前台,且当前焦点在目标Activity上。
补充说明
Android 12开始收紧了系统级广播的权限,ACTION_CLOSE_SYSTEM_DIALOGS仅允许系统应用或拥有特定系统权限的应用使用,第三方应用必须采用上述官方认可的替代方案实现需求。
内容的提问来源于stack exchange,提问作者Muhammad Asad
相关产品推荐
相关产品推荐

