2013-08-23 3 views
12

を追加するウィンドウマネージャ$ BadTokenExceptionができない私は、ウィンドウマネージャを使用する理由、thatsのが、それはエラーを以下me.givesのために働いていなかった。私は</strong>を録画<strong>背景用のアプリを開発していますウィンドウ

08-23 15:38:21.021: E/AndroidRuntime(4200): java.lang.RuntimeException: Unable to create service com.example.prankapp.BackgroundVideoRecorder: android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for this window type 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2277) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.app.ActivityThread.access$1600(ActivityThread.java:128) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1215) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.os.Looper.loop(Looper.java:137) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.app.ActivityThread.main(ActivityThread.java:4517) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at java.lang.reflect.Method.invokeNative(Native Method) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at java.lang.reflect.Method.invoke(Method.java:511) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at dalvik.system.NativeStart.main(Native Method) 
    08-23 15:38:21.021: E/AndroidRuntime(4200): Caused by: android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for this window type 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:707) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at com.example.prankapp.BackgroundVideoRecorder.onCreate(BackgroundVideoRecorder.java:53) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2267) 
    08-23 15:38:21.021: E/AndroidRuntime(4200):  ... 10 more 

私のウィンドウマネージャコード:

windowManager = (WindowManager) this.getSystemService(BackgroundVideoRecorder.WINDOW_SERVICE); 
      surfaceView = new SurfaceView(this); 
      LayoutParams layoutParams = new WindowManager.LayoutParams(
       1, 1, 
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT 
      ); 
      //layoutParams.gravity = Gravity.LEFT | Gravity.TOP; 
      windowManager.addView(surfaceView, layoutParams); 
      surfaceView.getHolder().addCallback(this); 

助けてください。事前におねがいします。

答えて

21
08-23 15:38:21.021: E/AndroidRuntime(4200): Caused by: android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for this window type 

問題: 許可がmaifestファイルに欠落しています。

解決策: AndroidManifestに以下の許可を使用してください。

+3

はい、私はまだあなたはplzはあなたのマニフェストを貼り付けることができ、エラー – Vasu

+0

を得た私のmainifestでそれを使用しましたか? –

+0

1つの活動、1つのサービス&以下の権限** \t \t < \t \t ** – Vasu

9

アプリケーションapiLevel >= 19は、

WindowManager.LayoutParams.TYPE_PHONEまたはWindowManager.LayoutParams.TYPE_SYSTEM_ALERT

を使用していない、あなたは

LayoutParams.TYPE_TOAST

を使用できるかどうか

TYPE_APPLICATION_PANEL

今LayoutParamsのための私のコードは次のようである、

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_TOAST, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 
+1

for Lollipop以下WindowManager.LayoutParams.TYPE_PHONEを使用しましたが、動作しませんでしたAndroid Mの場合は、提案したとおりにWindowManager.LayoutParams.TYPE_TOASTを使用しました。 –

+1

はい、 'TYPE_TOAST'はロック画面で描画しないときに動作します –

+0

' android.permission.SYSTEM_ALERT_WINDOW'を使用する必要がありますか? – t0m

関連する問題