我正在尝试使用插件location来获取设备的当前位置,但是Android从不要求权限。我收到此错误:
发生异常。 PlatformException (PlatformException(PERMISSION_DENIED_NEVER_ASK,位置权限 永远被拒绝-请打开应用程序设置,为null))
我在Android文件夹中可以找到的每个“ AndroidManifest.xml”文件中添加了以下行(不知道我应该实际使用哪个,我发现了其中的3个)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
我尝试使用插件permission_handler手动请求它们,但仍然没有弹出窗口。
我完全迷路了,网上找不到任何类似的东西。这是代码:
Future<LocationData> _getLocation() async {
LocationData currentLocation;
// returns a map with unreadable numbers which make no sense
var t = await PermissionHandler()
.requestPermissions([PermissionGroup.location]);
// returns false
var test = await location.requestPermission();
try {
currentLocation = await location.getLocation();
} catch (e) {
currentLocation = null;
}
return currentLocation;
}
编辑:我在设备(OnePlus 6)和仿真器(Pixel XL API 28)上尝试了此操作。我也尝试过卸载/重新安装该应用程序。
答案 0 :(得分:0)
该错误消息试图使您更清楚:您的设备(您或您正在测试的设备上的其他人)在Android设备上选择了 Never
之前要求获得许可。
这意味着Android不会再次请求许可。
只需在其他设备上尝试或再次卸载应用即可。
答案 1 :(得分:0)
您可以在代码中处理这种权限行为。即使您从未在模拟器上安装过应用程序,也可能会发生这种情况,并且必须在代码中进行处理,因为在最终用户掌握应用程序时可能会发生这种情况。
此异常意味着您从PermissionStatus.denied
权限处理程序插件方法中获取了checkPermissionStatus
,当用户在android权限对话框中点击Never ask again
复选框并拒绝请求时,可能会发生这种情况。
最简单的方法是什么?
如果您从PermissionStatus.denied
方法中获得了checkPermissionStatus
,则可以显示一个对话框,告知用户您的应用需要该权限才能提供更好的体验,并且可以在此对话框中将用户重定向到Android权限设置,用户可以在其中手动启用请求的权限。
您可以使用权限处理程序插件中的openAppSettings()
方法进行此操作。
也许您应该阅读this文章,该文章虽然有些陈旧,但它显示了有关如何在android中询问和处理用户权限的正确流程。本文不讨论新版Android Q中的新权限更改。
答案 2 :(得分:0)