SUP*_*MAN 6 permissions location flutter
我正在尝试请求我正在开发的应用程序的位置权限。它在 Android 设备上完美运行,但在 iOS 设备上没有任何提示。目标 iOS 版本是 11,我使用的软件包是geolocator: ^5.3.1和permission_handler: ^5.0.0+hotfix.5。
这是我的代码。
这是我的实用程序函数,用于在状态不是 时请求许可granted。
Future<PermissionStatus> getDeviceLocationPermission() async {
final PermissionStatus permissionStatus =
await Permission.locationWhenInUse.status;
if (permissionStatus != PermissionStatus.granted) {
await Permission.locationWhenInUse.request();
}
return permissionStatus;
}
Run Code Online (Sandbox Code Playgroud)
这是我收集职位详细信息的实用函数。
Future<Position> getDeviceCurrentLocation(
{@required PermissionStatus permissionStatus}) async {
Position position;
Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
if (permissionStatus == null) {
return null;
}
if (permissionStatus == PermissionStatus.granted) {
position = await geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
}
return position;
}
Run Code Online (Sandbox Code Playgroud)
这就是我在有状态小部件内访问这些实用程序的方式。
getDeviceLocationPermission().then((permissionStatus) {
print(permissionStatus);
getDeviceCurrentLocation(permissionStatus: permissionStatus)
.then((position) {
print(position);
});
});
Run Code Online (Sandbox Code Playgroud)
这是我的位置服务的 info.plist 权限。
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location when open and in the background.</string>
Run Code Online (Sandbox Code Playgroud)
在 iOS 设备上,它不会提示询问允许或拒绝访问的对话框,并且还会返回一个null值。
请询问是否还需要其他信息。有人可以帮我解决这个问题吗?提前致谢!
Cop*_*oad 17
将其添加到您的info.plist文件中。
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location permission is required.</string>
Run Code Online (Sandbox Code Playgroud)
添加PERMISSION_LOCATION=1到您的podfile. 检查以下内容:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## Add this line
'PERMISSION_LOCATION=1'
]
end
end
end
Run Code Online (Sandbox Code Playgroud)
请求许可:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location permission is required.</string>
Run Code Online (Sandbox Code Playgroud)
我遵循了你的代码以及他们在权限处理程序包中提供的代码。运行两者并在代码中重现该问题。
该问题可以如下解决。:
创建了通用权限值列表。
List<Permission> lp = Permission.values;
Run Code Online (Sandbox Code Playgroud)
调整函数 getDeviceLocationPermission 如下:
Future<PermissionStatus> getDeviceLocationPermission() async {
Permission _permission = lp.elementAt(5); // 5 = location in use permission
// The following line then prompts the required alert dialog
final PermissionStatus permissionStatus = await _permission.request();
/* final PermissionStatus permissionStatus = await Permission.locationWhenInUse.status;
if (permissionStatus != PermissionStatus.granted) {
await Permission.locationWhenInUse.request();
}*/
return permissionStatus;
}
Run Code Online (Sandbox Code Playgroud)
注意:以上是解决您的问题所需的最少代码。根据您的要求,您可能需要取消注释 if 条件。
在我看来,更好的包是location包。一个包为您提供了权限处理程序以及经纬度,并且代码非常简单。见下文 :
var location = new Location();
currentLocation = await location.getLocation(); // This prompts the dialog
// __If condition and all
debugPrint(currentLocation.latitude.toString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12068 次 |
| 最近记录: |