我看過:WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
總是與<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
組合AndroidManifest.xml
。例如here。對於WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,我需要android.permission.SYSTEM_ALERT_WINDOW嗎?
考慮以下代碼:
windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
surfaceView = new SurfaceView(this);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
100, 100,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT
);
layoutParams.gravity = Gravity.START | Gravity.TOP;
windowManager.addView(surfaceView, layoutParams);
我需要爲這個代碼SYSTEM_ALERT_WINDOW
權限?
從doc約SYSTEM_ALERT_WINDOW
:
允許應用來創建使用TYPE_SYSTEM_ALERT,在所有其他應用的頂部示出的窗戶。很少有應用程序應該使用此權限;這些窗口用於與用戶進行系統級交互。
這是關於TYPE_SYSTEM_ALERT
而不是約TYPE_SYSTEM_OVERLAY
。嗯?
UPDATE:
行:windowManager.addView(surfaceView, layoutParams);
java.lang.RuntimeException: Unable to create service: android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for this window type
所以大概<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
是必要的。
我推薦你發帖y我們的解決方案作爲答案,並接受它,當我看到您的問題時,我的第一印象是尚未得到答覆,但您的第二個更新對我有很大幫助。 –