在Service中使用系統dialog彈框,但是無法覆蓋全部,底部菜單依然可以被點擊,在某些場景下是不符合需求的 getDialog().getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); 顯然是 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" />
在次運行後彈框已經是系統級,並且下方菜單已經無法被點擊,大部分使用第二種方案,系統及應用基本一開始就已經定性,不會也不能隨意更改