2013-08-23 35 views
12

Tôi đang phát triển ứng dụng cho nền băng video, đó là lý do tại sao tôi sử dụng Chương trình quản lý cửa sổ X, nhưng nó không làm việc cho me.gives lỗi sau đây:

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 

đang Chương trình quản lý cửa sổ X của tôi:

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); 

Xin hãy giúp tôi.Cảm ơn trước.

Trả lời

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 

Vấn đề: Permission thiếu trong tập tin maifest.

Giải pháp: Sử dụng giấy phép sau trong AndroidManifest.

android.permission.SYSTEM_ALERT_WINDOW 
+3

có, tôi sử dụng nó trong mainifest của tôi vẫn còn có lỗi – Vasu

+0

bạn plz có thể dán biểu hiện của bạn? –

+0

một hoạt động, một dịch vụ và các quyền sau đây ** \t \t < use-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" /> \t \t ** – Vasu

9

nếu ứng dụng của bạn apiLevel >= 19, không sử dụng

WindowManager.LayoutParams.TYPE_PHONE hoặc WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

bạn có thể sử dụng

LayoutParams.TYPE_TOAST

hoặc

TYPE_APPLICATION_PANEL

tại mã của tôi cho LayoutParams là như thế,

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

cho Lollipop và thấp hơn tôi đã sử dụng WindowManager.LayoutParams.TYPE_PHONE, nhưng nó không hoạt động cho Android M, sau đó tôi đã sử dụng WindowManager.LayoutParams.TYPE_TOAST như bạn đã đề xuất và nó hoạt động ngay bây giờ, cảm ơn! –

+1

Có, 'TYPE_TOAST' hoạt động khi bạn không sử dụng để vẽ trên màn hình khóa –

+0

Tôi phải sử dụng' android.permission.SYSTEM_ALERT_WINDOW'? – t0m

Các vấn đề liên quan