私は、<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
と常に組み合わせたWindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
を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" />
が必要です。
答えとして私たちの解決策、それを受け入れる、私の最初の印象私はあなたの質問を見たときにまだ答えはありませんが、あなたの2回目の更新は私を助けた。 –