虽然允许位置权限它工作正常,但在拒绝位置权限时我收到以下错误。
Dart 错误:未处理的异常:
PlatformException(PERMISSION_DENIED,拒绝访问位置数据,空)
预期行为应该给我空响应,以便我们可以进一步进行。
在 pubspec.yaml 中导入 pub
将以下代码写入任何按钮点击事件
尝试 {
位置 position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}赶上(e){
打印(e);
}
你会有一个错误。
版本: 1.0.1
[✓] Flutter (Channel master, v1.0.1-pre.2, on Mac OS X 10.14 18A384a, locale en-GB)
[✓] Android 工具链 - 为 Android 设备开发 (Android SDK 28.0.3)
[✓] iOS 工具链 - 为 iOS 设备开发 (Xcode 10.1)
[✓] Android Studio(3.2 版)
[✓] VS 代码(版本 1.29.1)
[✓] 已连接设备(1 个可用)
• 未发现问题!
平台:
你有没有解决这个如何处理这个
有什么解决方法吗?
@YogeshLegendkiller @kaumudpa如果您想解决这个问题,只需尝试接听电话并在 PlatformException 上返回 null。
@YogeshLegendkiller,@kaumudpa,由@jaumard提供的解决方案是解决这一问题的提出方式。
另一种方法是使用checkGeolocationPermissionStatus
方法并确保在调用getCurrentPosition
、 getLastKnownPosition
或getPositionStream
之前将状态设置为PermissionStatus.granted
getPositionStream
方法。 但是,这意味着您需要注意自己请求权限。 例如:
Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
Position position = await geolocator.getCurrentPosition();
}
如何请求许可?
@abdullah4one您可以使用permission_handler并请求这样的许可:
import 'package:permission_handler/permission_handler.dart';
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
回复可能晚了,但我也面临着同样的问题,即该应用程序在 iOS 中没有请求许可,并且在 android 中运行良好。
因为没有请求许可,这就是许可代码不适用于 iOS 的原因。 我找到了一个名为“location_permissions”的包,它可以用来手动请求许可。
步骤如下
导入文件中的包
在要请求权限的页面上添加以下代码。 (最好将其添加到应用程序的第一页。)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
在同一个文件中添加以下两个方法
void location_permission() 异步{
最终 PermissionStatus 权限 = await _getLocationPermission();
如果(权限== PermissionStatus.granted){
最终位置 = 等待 geolocator.getCurrentPosition(
requiredAccuracy: LocationAccuracy.best);
// Use the position to do whatever...
}
}
未来
最终 PermissionStatus 权限 = 等待 LocationPermissions()
.checkPermissionStatus(level: LocationPermissionLevel.location);
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
就是这样,现在你应该在 iOS 应用程序中得到一个弹出窗口,它会要求获得位置许可。
最有用的评论
@YogeshLegendkiller,@kaumudpa,由@jaumard提供的解决方案是解决这一问题的提出方式。
另一种方法是使用
checkGeolocationPermissionStatus
方法并确保在调用getCurrentPosition
、getLastKnownPosition
或getPositionStream
之前将状态设置为PermissionStatus.granted
getPositionStream
方法。 但是,这意味着您需要注意自己请求权限。 例如: