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(未在其他设备上尝试过)中的每台设备中每次都自动拒绝权限。即使在允许设置权限后,它也不起作用,权限再次被拒绝。
我用过的代码:
有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);
}
-
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 它突然起作用了。
在一个星期内阻止自己问这个问题之后,我来了。我一直在努力解决 Android 的无权限问题。我用 Flutter 开发了这个应用程序,并已将其上传到 Play 商店进行开放测试。但是,在发布模式下,它从不请求许可。只是从来没有。没有消息或登录 console/logcat.
我试过使用两到三个 flutter 包来实现相同的效果,但 none 奏效了。它在调试模式下完美运行,权限弹出窗口出现,您允许它并且功能正常运行。在发布版本的情况下,弹出窗口不会出现。当您检查应用程序的权限设置时,您会看到在 Android 7.0、8.0、10(未在其他设备上尝试过)中的每台设备中每次都自动拒绝权限。即使在允许设置权限后,它也不起作用,权限再次被拒绝。
我用过的代码:
有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); }
-
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 它突然起作用了。