Сбой приложения при открытии меню разработчика в приложении - React Native

Мое приложение вылетает, когда я открываю меню разработчика в приложении. Я не знаю точного названия, но ниже находится меню, при открытии которого приложение вылетает.

меню разработчика в приложении

Версии

  • Андроид: 8.0.0
  • Реагировать нативный: 0.47.2

Ошибка

android.view.WindowManager$BadTokenException: невозможно добавить окно android.view.ViewRootImpl$W@388d962 - разрешение отклонено для типа окна 2003

Журналы Adb

09-18 17:45:29.358  6982  6982 E AndroidRuntime: FATAL EXCEPTION: main
09-18 17:45:29.358  6982  6982 E AndroidRuntime: Process: com.numu.app, PID: 6982
09-18 17:45:29.358  6982  6982 E AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@388d962 -- permission denied for window type 2003
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl.setView(ViewRootImpl.java:815)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.app.Dialog.show(Dialog.java:330)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.facebook.react.devsupport.DevSupportManagerImpl.showDevOptionsDialog(DevSupportManagerImpl.java:482)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.facebook.react.ReactInstanceManager.showDevOptionsDialog(ReactInstanceManager.java:663)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.facebook.react.ReactActivityDelegate.onKeyUp(ReactActivityDelegate.java:166)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.facebook.react.ReactActivity.onKeyUp(ReactActivity.java:82)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.KeyEvent.dispatch(KeyEvent.java:2712)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.app.Activity.dispatchKeyEvent(Activity.java:3280)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:352)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4768)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4640)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4175)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4228)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4194)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4321)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4202)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4378)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4175)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4228)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4194)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4202)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4175)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4228)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4194)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4354)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4515)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2465)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2028)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2019)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2442)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.os.MessageQueue.nativePollOnce(Native Method)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.os.MessageQueue.next(MessageQueue.java:325)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:142)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6798)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
09-18 17:45:29.358  6982  6982 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
09-18 17:45:29.374  4106  9992 W ActivityManager:   Force finishing activity com.numu.app/.MainActivity
09-18 17:45:29.494   536  9478 E [email protected]_lock: Release wakelock is released
09-18 17:45:29.877  4106  4199 W ActivityManager: Activity pause timeout for ActivityRecord{ffed9d5 u0 com.numu.app/.MainActivity t3548 f}
09-18 17:45:29.882   560   560 E ANDR-PERF-MPCTL: hint lookup failed
09-18 17:45:29.926  4106  4199 W BroadcastQueue: Background execution not allowed: receiving Intent { act=org.codeaurora.action.stk.idle_screen flg=0x10 (has extras) } to com.android.stk/.StkCmdReceiver
09-18 17:45:30.485  5966  6232 W OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
09-18 17:45:30.485  5966  6232 W OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
09-18 17:45:40.410  4106  4199 W ActivityManager: Activity destroy timeout for ActivityRecord{ffed9d5 u0 com.numu.app/.MainActivity t3548 f}

Я получаю эти журналы, запустив: adb logcat app-name *:W.

Я видел, что эта проблема в основном возникает на устройствах Oreo с RN версии 48 или выше. В Интернете есть несколько решений, которые включают добавление собственного кода Java. Но я не могу их правильно понять, и ни один из них до сих пор не работал у меня. Ниже приведены некоторые ссылки, по которым я следовал;


person Haseeb Burki    schedule 18.09.2018    source источник


Ответы (1)


Цитирование ответа Github здесь:

https://github.com/facebook/react-native/issues/4043

Здесь я нашел обходной путь: http://stackoverflow.com/questions/32061934/permission-from-manifest-doesnt-work-in-android-6

добавьте это в свою MainActivity и вызовите ее в своем onCreate или что-то в этом роде. Появится экран, на котором вы можете активировать разрешение.

private static final int OVERLAY_PERMISSION_REQUEST_CODE = 2;

@TargetApi(Build.VERSION_CODES.M)
private void _askForOverlayPermission() {
    if (!BuildConfig.DEBUG || android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        return;
    }

    if (!Settings.canDrawOverlays(this)) {
        Intent settingsIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(settingsIntent, OVERLAY_PERMISSION_REQUEST_CODE);
    }
}

Вероятно, есть способ реализовать меню разработчика, которому не нужно это SystemAlertWindow.

person JRK    schedule 18.09.2018