Flutter - Android 在发布模式下不请求许可 - 自动拒绝

Flutter - Android doesn't ask for permission in release mode - Auto denied

在一个星期内阻止自己问这个问题之后,我来了。我一直在努力解决 Android 的无权限问题。我用 Flutter 开发了这个应用程序,并已将其上传到 Play 商店进行开放测试。但是,在发布模式下,它从不请求许可。只是从来没有。没有消息或登录 console/logcat.

我试过使用两到三个 flutter 包来实现相同的效果,但 none 奏效了。它在调试模式下完美运行,权限弹出窗口出现,您允许它并且功能正常运行。在发布版本的情况下,弹出窗口不会出现。当您检查应用程序的权限设置时,您会看到在 Android 7.0、8.0、10(未在其他设备上尝试过)中的每台设备中每次都自动拒绝权限。即使在允许设置权限后,它也不起作用,权限再次被拒绝。

我用过的代码:

  1. permission包:

    var permissionStatus =
        await Permission.getPermissionsStatus([PermissionName.Storage]);
    print(permissionStatus.toString());
    if (permissionStatus.first.permissionStatus == PermissionStatus.allow) {
      _saveFile();
    } else {
      var permissions =
          await Permission.requestPermissions([PermissionName.Storage]);
      print(permissions.first.permissionStatus.toString());
      if (permissions.first.permissionStatus == PermissionStatus.allow)
        _saveFile();
      else
        Fluttertoast.showToast(
            msg: "Storage permission required to share!",
            toastLength: Toast.LENGTH_LONG,
            gravity: ToastGravity.BOTTOM,
            timeInSecForIosWeb: 2,
            backgroundColor: greyColor,
            textColor: Colors.white,
            fontSize: 16.0);
    }
    
  2. 使用permission_handler包:

    if (await permissionsService.hasStoragePermission()) {
       print("Saving file");
      _saveFile();
    } else {
    final PermissionHandler _permissionHandler = PermissionHandler();
    
    var permission =
      Platform.isAndroid ? PermissionGroup.storage : PermissionGroup.photos;
    var result = await _permissionHandler.requestPermissions([permission]);
    
    if (result[permission] == PermissionStatus.granted)
       _saveFile();
    else
      Fluttertoast.showToast(
        msg: "Storage permission required to share!",
        toastLength: Toast.LENGTH_LONG,
        gravity: ToastGravity.BOTTOM,
        timeInSecForIosWeb: 2,
        backgroundColor: greyColor,
        textColor: Colors.white,
        fontSize: 16.0);
    

我也尝试过使用权限服务。

我在这里找到了没有答案的类似问题 -

我的应用已经被 Google Play Store 延迟了 16 天的验证时间,请提供解决方案以避免进一步延迟。不,flutter clean 没有帮助。

编辑 - 在 pub.dev 上搜索更多的权限处理包,我发现 permission_plugin 也不起作用,同样的问题,但它给出了logcat.

中的错误

错误-

2020-10-02 23:54:44.289 16214-16260/? E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(171)] Unhandled Exception:
    MissingPluginException(No implementation found for method check-permissions on channel permissions_plugin)
#0  MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157)
    <asynchronous suspension>
#1  PermissionsPlugin.checkPermissions (package:permissions_plugin/permissions_plugin.dart:69)
    <asynchronous suspension>
#2   _CertificateState._saveImage (package:app_name/screens/app_screen.dart:211)
    <asynchronous suspension>

更新:此错误也与其他权限包一起出现。现在,我相信这是问题的原因。我将分享所需的任何代码。

您是否已将以下代码添加到 android 清单文件?

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

我已经通过创建一个新项目并复制其中的代码解决了这个问题。这个建议是在 Official Flutter Github Repo 的类似问题上发现的。我相信发生这种情况是因为如该问题线程中所述,将通道从 master 更改为稳定,但再次将其更改回来并不能解决问题。我还查看了与插件异常相关的所有地方,但没有 answer/solution 起作用。

这个bug/issue真的应该被开发者看一下。

我也遇到了同样的问题,但找不到解决方案,但是当我尝试将 android 模拟器的 API 从 30 API 降低到 28 API 它突然起作用了。