2017-02-21 23 views
2

私は、<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />と常に組み合わせたWindowManager.LayoutParams.TYPE_SYSTEM_OVERLAYAndroidManifest.xmlに表示しました。例えば、hereWindowManager.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_ALERTTYPE_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" />が必要です。

+0

答えとして私たちの解決策、それを受け入れる、私の最初の印象私はあなたの質問を見たときにまだ答えはありませんが、あなたの2回目の更新は私を助けた。 –

答えて

2

変更
からWindowManager.LayoutParams.TYPE_TOASTです。
android.permission.SYSTEM_ALERT_WINDOWがApps設定から削除され、機能します。

触発さ:here

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
      100, 100, 
      WindowManager.LayoutParams.TYPE_TOAST, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT 
); 

このソリューションが必要としないようだandroid:name="android.permission.SYSTEM_ALERT_WINDOW"
LayoutParams.TYPE_TOASTは、API 26の代わりに使用LayoutParams.TYPE_APPLICATION_OVERLAYから廃止されており、それがUPDATEが01​​許可が必要

=>See more

+0

:Dあなたはとにかく許可を求めなければなりません – atasoyh

関連する問題