Flutter 构建在三星手机中失败,权限被拒绝:来自 android 的广播要求以用户 -1 身份运行,但正在从用户 0 调用

saj*_*aha 5 android samsung-mobile flutter

尝试在三星 Note 8 手机上构建以前可以运行的应用程序,这是错误Permission Denial: Broadcast from android requests to run as user -1 but is Calling from user 0

\n
    \n
  • 不适用于 Samsung Note 8、Android 版本 9
  • \n
  • 正在使用 Mi A3,Android 版本 11
  • \n
\n

现在我明白只有访问系统功能的系统应用程序才需要 INTERACT_ACROSS_USERS_FULL 权限。我的这个应用之前运行正常,升级了flutter和dart版本,也升级了Mobile OS。

\n

即使在所有清单文件中添加这些权限,仍然不起作用,

\n
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>\n<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>\n
Run Code Online (Sandbox Code Playgroud)\n

也尝试过这个,甚至通过调整手机上的开发人员选项来工作一次,因为我在这里给出了一个答案,调整开发人员选项,但现在也不起作用。

\n

这是我的颤医生出来了,

\n
[\xe2\x9c\x93] Flutter (Channel master, 2.6.0-1.0.pre.153, on macOS 11.5.1 20G80 darwin-x64, locale en-IN)\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 30.0.3)\n[\xe2\x9c\x93] Xcode - develop for iOS and macOS (Xcode 12.4)\n[\xe2\x9c\x93] Chrome - develop for the web\n[\xe2\x9c\x93] Android Studio (version 2020.3)\n[\xe2\x9c\x93] Connected device (2 available)\n
Run Code Online (Sandbox Code Playgroud)\n

完整的错误是这样的,

\n
D/vndksupport( 5675): Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.\nE/flutter ( 5675): [ERROR:flutter/fml/platform/android/jni_util.cc(182)] java.lang.SecurityException: Permission Denial: broadcast from android asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS\nE/flutter ( 5675):  at android.os.Parcel.createException(Parcel.java:1966)\nE/flutter ( 5675):  at android.os.Parcel.readException(Parcel.java:1934)\nE/flutter ( 5675):  at android.os.Parcel.readException(Parcel.java:1884)\nE/flutter ( 5675):  at android.app.IActivityManager$Stub$Proxy.reportActivityFullyDrawn(IActivityManager.java:7312)\nE/flutter ( 5675):  at android.app.Activity.reportFullyDrawn(Activity.java:2092)\nE/flutter ( 5675):  at io.flutter.embedding.android.FlutterActivity.onFlutterUiDisplayed(FlutterActivity.java:1100)\nE/flutter ( 5675):  at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate$1.onFlutterUiDisplayed(FlutterActivityAndFragmentDelegate.java:88)\nE/flutter ( 5675):  at io.flutter.embedding.android.FlutterView$2.onFlutterUiDisplayed(FlutterView.java:133)\nE/flutter ( 5675):  at io.flutter.embedding.engine.FlutterJNI.onFirstFrame(FlutterJNI.java:462)\nE/flutter ( 5675):  at android.os.MessageQueue.nativePollOnce(Native Method)\nE/flutter ( 5675):  at android.os.MessageQueue.next(MessageQueue.java:326)\nE/flutter ( 5675):  at android.os.Looper.loop(Looper.java:181)\nE/flutter ( 5675):  at android.app.ActivityThread.main(ActivityThread.java:7073)\nE/flutter ( 5675):  at java.lang.reflect.Method.invoke(Native Method)\nE/flutter ( 5675):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)\nE/flutter ( 5675):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)\nE/flutter ( 5675): Caused by: android.os.RemoteException: Remote stack trace:\nE/flutter ( 5675):  at com.android.server.am.UserController.handleIncomingUser(UserController.java:1818)\nE/flutter ( 5675):  at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:25789)\nE/flutter ( 5675):  at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:25720)\nE/flutter ( 5675):  at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:26590)\nE/flutter ( 5675):  at android.app.ContextImpl.sendBroadcastAsUser(ContextImpl.java:1264)\nE/flutter ( 5675): \nE/flutter ( 5675): \nF/flutter ( 5675): [FATAL:flutter/shell/platform/android/platform_view_android_jni_impl.cc(1220)] Check failed: fml::jni::CheckException(env). \nF/libc    ( 5675): Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 5675 (bro.neighbroapp), pid 5675 (bro.neighbroapp)\n
Run Code Online (Sandbox Code Playgroud)\n

saj*_*aha 2

这是最新 Flutter 版本的问题,我用下面的 eidt 修复了它,

这是一个解决方法,它对我有用。

  1. MainActivity.kt
  2. 进口 import android.os.Build
  3. 粘贴这个
    override fun onFlutterUiDisplayed() {
        if (Build.VERSION.SDK_INT >= 100) { //I gave 100 just to confirm , it shoud be android ver 10
            reportFullyDrawn();
        }
    }
Run Code Online (Sandbox Code Playgroud)
  1. flutter clean
  2. flutter run