应用程序在打开应用程序内开发人员菜单时崩溃 - React Native

问题描述 投票:0回答:1

当我打开应用内开发人员菜单时,我的应用崩溃了。我不知道确切的名称,但下面是应用程序崩溃时打开的菜单。

in-app developer menu

版本

  • Android:8.0.0
  • React Native: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。

我已经看到这个问题主要发生在RN版本为48或更高版本的Oreo设备上。在线有多种解决方案,包括添加本机Java代码。但我无法理解他们,到目前为止他们都没有为我工作。以下是我所遵循的一些链接;

android react-native android-8.0-oreo
1个回答
0
投票

在这里引用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的开发菜单。

© www.soinside.com 2019 - 2024. All rights reserved.