Отказано в доступе для типа окна 2002 и 2038 - PullRequest
0 голосов
/ 25 сентября 2019

Я показываю сервисное окно чрезмерно, и оно работает нормально с большинством моих пользователей, однако я нахожу эти ошибки на Crashlytics

Старые устройства (Android 7 и ниже)

Fatal Exception: java.lang.RuntimeException: Unable to create service com.app.name.mainService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@43108e0 -- permission denied for window type 2002
   at android.app.ActivityThread.handleCreateService + 3172(ActivityThread.java:3172)
   at android.app.ActivityThread.-wrap5(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage + 1550(ActivityThread.java:1550)
   at android.os.Handler.dispatchMessage + 102(Handler.java:102)
   at android.os.Looper.loop + 154(Looper.java:154)
   at android.app.ActivityThread.main + 6077(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 865(ZygoteInit.java:865)
   at com.android.internal.os.ZygoteInit.main + 755(ZygoteInit.java:755)

Более новые устройства (особенно Galaxy S8 Android 9.0)

Fatal Exception: java.lang.RuntimeException: Unable to create service com.app.name.mainService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@df3ca8f -- permission denied for window type 2038
   at android.app.ActivityThread.handleCreateService + 3768(ActivityThread.java:3768)
   at android.app.ActivityThread.access$1400 + 237(ActivityThread.java:237)
   at android.app.ActivityThread$H.handleMessage + 1801(ActivityThread.java:1801)
   at android.os.Handler.dispatchMessage + 106(Handler.java:106)
   at android.os.Looper.loop + 214(Looper.java:214)
   at android.app.ActivityThread.main + 7050(ActivityThread.java:7050)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 493(RuntimeInit.java:493)
   at com.android.internal.os.ZygoteInit.main + 965(ZygoteInit.java:965)

Мой код, который я использую,

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,

                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                            WindowManager.LayoutParams.FLAG_SPLIT_TOUCH |
                            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                    PixelFormat.TRANSLUCENT);
        } else {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_PHONE,

                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
                            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                            WindowManager.LayoutParams.FLAG_SPLIT_TOUCH |
                            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                    PixelFormat.TRANSLUCENT);
        }

        mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        if (mWindowManager != null) {
            mWindowManager.addView(serviceRootView, params);
        }

Я также проверяю, что разрешение Draw предоставлено, а файл манифеста имеетразрешение на

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

И я много искал по другим вопросам, все предлагали вышеуказанное решение, но это не помогло, так как сбой все еще происходит!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...