android 窗口类型2038的权限被拒绝,不考虑标志和绘制权限

wljmcqd8  于 2023-02-10  发布在  Android
关注(0)|答案(1)|浏览(365)

我知道这个问题以前经常被问到,但是我仍然会收到很多用户的崩溃报告,不管他们的API是什么。所以我有一个前台服务,每次运行前都会检查绘制权限。我使用以下代码:

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

            myWindowParams = new WindowManager.LayoutParams(
                    movable_width,
                    movable_height,
                    flags,
                    WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                    PixelFormat.TRANSLUCENT);

舱单

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Firebase错误

Exception: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@1a0fb9e -- permission denied for window type 2038
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:830)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
   at com.b.app.mainService.setupWindows(mainService.java:26)
   at android.app.ActivityThread.handleCreateService(ActivityThread.java:3544)
   at android.app.ActivityThread.access$1300(ActivityThread.java:200)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
   at android.os.Handler.dispatchMessage(Handler.java:106)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:6762)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

有什么想法吗?

oknrviil

oknrviil1#

如果你在三星安卓13手机上测试,我想这可能是问题所在。
我也就这个问题联系了三星。他们回复说:
我们在日志中发现了SamsungRestrictOverlayProcessor,我们认为这是阻止应用程序覆盖的原因。
在调用尚未通过官方应用商店安装的应用程序期间,与覆盖相关的权限将被临时禁用(Play store / Galaxy store)。这是一项旨在防止语音钓鱼的安全功能。如果您的应用程序是通过Play store或Galaxy store或ADB安装的,则不会再出现此问题。在开发过程中,建议您只通过ADB或Android Studio安装和测试您的应用程序。您也可以尝试通过Galaxy Store为您的应用程序提供封闭测试版,而不是通过第三方渠道分发应用程序的APK。
只要您遵循这些方法中的任何一种来测试应用程序并通过适当的存储区分发应用程序,SamsungRestrictOverlayProcessor将不再限制应用程序的覆盖。
希望这对你有帮助。

相关问题