Android:使用TYPE_APPLICATION_OVERLAY拒绝2038型窗口的权限 [英] Android: permission denied for window type 2038 using TYPE_APPLICATION_OVERLAY

查看:2856
本文介绍了Android:使用TYPE_APPLICATION_OVERLAY拒绝2038型窗口的权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个在其他应用程序之上的视图:

I trying to create a view that is above other applications:

WindowManager.LayoutParams paramsDirectorView = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

我查看了其他答复,并发现了透支申请"的以下内容:

I have looked in other responses and found the following things for "drawing over applications":

  • 清单中有android.permission.SYSTEM_ALERT_WINDOW
  • 我正在做Settings.canDrawOverlays(this)检查 返回true.
  • 我已经完成了此处的所有操作窗口类型的权限被拒绝
  • I have android.permission.SYSTEM_ALERT_WINDOW in the manifest
  • I am doing the Settings.canDrawOverlays(this) check which comes back true.
  • I have done everything located here permission denied for window type

我仍然收到-窗口类型2038的权限被拒绝"错误.截至目前,我正在使用TYPE_PHONE,并且可以使用,但已弃用,并说要使用TYPE_APPLICATION_OVERLAY.有人可以跟进吗,因为TYPE_PHONE答案不是真正的解决方案,而是Android O中不推荐使用的补丁工作"解决方案.

I am still getting "-- permission denied for window type 2038" error. As of now I am using TYPE_PHONE and it works, but it is deprecated and says to use TYPE_APPLICATION_OVERLAY. Can some one follow up on this as the TYPE_PHONE answer is not truly a resolution but a "patch work" solution that is deprecated in Android O.

我正在Android 7.1.2上运行

I am running on Android 7.1.2

android.view.WindowManager $ BadTokenException:无法添加窗口 android.view.ViewRootImpl$W@1f47e89-窗口权限被拒绝 在2038型 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3344) 在android.app.ActivityThread.-wrap21(ActivityThread.java)处 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1583) 在android.os.Handler.dispatchMessage(Handler.java:102)处 android.os.Looper.loop(Looper.java:154)在 android.app.ActivityThread.main(ActivityThread.java:6121)位于 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)导致 创建人:android.view.WindowManager $ BadTokenException:无法添加窗口 android.view.ViewRootImpl$W@1f47e89-窗口权限被拒绝 在android.view.ViewRootImpl.setView(ViewRootImpl.java:703)处输入2038 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342) 在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 在 HeadService.TwoViewManager.(TwoViewManager.java:99) 在 HeadService.UIHeadService.onStartCommand(UIHeadService.java:65) 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3327) 在android.app.ActivityThread.-wrap21(ActivityThread.java)处 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1583) 在android.os.Handler.dispatchMessage(Handler.java:102)处 android.os.Looper.loop(Looper.java:154)在 android.app.ActivityThread.main(ActivityThread.java:6121)位于 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:889) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@1f47e89 -- permission denied for window type 2038 at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3344) at android.app.ActivityThread.-wrap21(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1583) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@1f47e89 -- permission denied for window type 2038 at android.view.ViewRootImpl.setView(ViewRootImpl.java:703) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) at HeadService.TwoViewManager.(TwoViewManager.java:99) at HeadService.UIHeadService.onStartCommand(UIHeadService.java:65) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3327) at android.app.ActivityThread.-wrap21(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1583) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

推荐答案

我遇到了完全相同的问题.我想你应该区分目标(奥利奥之前和之后)

I had the exactly same issue. I guess you should differentiate the target (before and after Oreo)

int LAYOUT_FLAG;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
     LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
}

params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        LAYOUT_FLAG,
        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

这篇关于Android:使用TYPE_APPLICATION_OVERLAY拒绝2038型窗口的权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆