Android:使用TYPE_APPLICATION_OVERLAY拒绝2038型窗口的权限 [英] Android: permission denied for window type 2038 using TYPE_APPLICATION_OVERLAY
问题描述
我试图创建一个在其他应用程序之上的视图:
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屋!