Flutter:位置权限:使用时或始终

Kar*_*dts 2 dart flutter

我想知道用户是否为该位置选择了“仅在使用时”或“始终”。

https://pub.dev/packages/location_permissions

我从包中尝试了这段代码:

 ServiceStatus serviceStatus =
          await LocationPermissions().checkServiceStatus();
      print(serviceStatus);
Run Code Online (Sandbox Code Playgroud)

但它打印:

ServiceStatus.enabled
Run Code Online (Sandbox Code Playgroud)

有没有可能(也许用另一个包)知道这一点?

提前致谢!

Igo*_*din 5

permission_handler可以做到这一点。

enum PermissionGroup {
  ...

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation - Always
  locationAlways,

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation - WhenInUse
  locationWhenInUse
}
Run Code Online (Sandbox Code Playgroud)

请求权限:

final ph = PermissionHandler();
final requested = await ph.requestPermissions([
  PermissionGroup.locationAlways, 
  PermissionGroup.locationWhenInUse
]);

final alwaysGranted = requested[PermissionGroup.locationAlways] == PermissionStatus.granted;
final whenInUseGranted = requested[PermissionGroup.locationWhenInUse] == PermissionStatus.granted;
Run Code Online (Sandbox Code Playgroud)

将这些权限添加到 AndroidManifest.xml<manifest>标签内:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test_project">

    <!-- add these -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
Run Code Online (Sandbox Code Playgroud)

这些<dict>是 Info.plist 的标签:

    <!-- Permission options for the `location` group -->
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Need location when in use</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Always and when in use!</string>
    <key>NSLocationUsageDescription</key>
    <string>Older devices need location.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Can I haz location always?</string>
Run Code Online (Sandbox Code Playgroud)

  • 不要将此库用于 iOS。您的应用程序可能会因请求太多权限而被苹果拒绝。查看 github issues 寻求解决方案。 (2认同)