车载Launcher中,Service下Dialog弹框,并且覆盖状态栏且状态栏不能点击
在Service中使用系统dialog弹框,但是无法覆盖全部,底部菜单依然可以被点击,在某些场景下是不符合需求的
getDialog().getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
显然是 dialog 的层级不够高导致的,很多时候会直接修改层级,但是如果修改的层级涉及到系统权限,运行就会直接报错
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR)
WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@e94bee9 -- permission denied for window type 2010
这种情况一般有两种方案
1、manifest 中添加 android:sharedUserId="android.uid.system"
直接将整个项目变成系统级应用,这样就能随意使用权限不被限制
2、manifest 中添加 INTERNAL_SYSTEM_WINDOW permission
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
在次运行后弹框已经是系统级,并且下方菜单已经无法被点击,大部分使用第二种方案,系统及应用基本一开始就已经定性,不会也不能随意更改