【问题标题】:permission denied for window type 2038 regardless of the flags and draw permissions无论标志和绘制权限如何,窗口类型 2038 的权限都被拒绝
【发布时间】:2023-02-09 18:05:17
【问题描述】:

我知道这个问题以前经常被问到,但我仍然收到许多用户的崩溃报告,而不管他们的 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)

有任何想法吗?

【问题讨论】:

    标签: android service android-service android-windowmanager


    【解决方案1】:

    如果您在三星 Android 13 手机上进行测试,我认为这可能是问题所在。

    我还就此问题联系了三星。他们回答说:

    我们在日志中找到了 SamsungRestrictOverlayProcessor,我们预计这是阻止应用程序覆盖的原因。

    在调用未通过官方商店(Play 商店/Galaxy 商店)安装的应用程序时,覆盖相关权限会暂时禁用。这是一项旨在防止语音网络钓鱼的安全功能。如果您的应用程序是通过 Play 商店或 Galaxy 商店或 ADB 安装的,则不会再出现此问题。 在开发过程中,建议仅通过 ADB 或 Android Studio 安装和测试您的应用程序。您也可以尝试通过 Galaxy 商店为您的应用程序提供封闭测试版以进行测试,而不是通过第 3 方来源分发您的应用程序的 APK。

    只要您按照这些方法之一通过适当的商店测试和分发您的应用程序,SamsungRestrictOverlayProcessor 将不再限制您的应用程序的覆盖。

    我希望这对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-22
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      相关资源
      最近更新 更多