【问题标题】:Flutter: Location permission: when in use or alwaysFlutter:位置权限:使用时或始终
【发布时间】:2020-02-28 23:42:57
【问题描述】:

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

https://pub.dev/packages/location_permissions

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

 ServiceStatus serviceStatus =
          await LocationPermissions().checkServiceStatus();
      print(serviceStatus);

但它会打印:

ServiceStatus.enabled

是否有可能(可能使用另一个包)知道这一点?

提前致谢!

【问题讨论】:

  • 也许这个包会给你deniedgrantedrestrictedunknown中的状态。您可以通读枚举部分。
  • 我试过了,但在这两种情况下都给出了:'granted'

标签: flutter dart


【解决方案1】:

permission_handler 可以做到这一点。

enum PermissionGroup {
  ...

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

  /// Android: Fine and Coarse Location
  /// iOS: CoreLocation - WhenInUse
  locationWhenInUse
}

请求权限:

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;

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

<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" />
...

这些到&lt;dict&gt; 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>

【讨论】:

  • 谢谢!我已经添加了,所以我不知道这是否是问题....
  • 是的,所以我早些时候请求了许可。在应用程序中,我想知道权限是否设置为“始终”以显示某个屏幕。但我一直对这两个值都是错误的......
  • 不要将此库用于 iOS。您的应用可能会因为请求过多权限而被苹果拒绝。查看 github 问题以寻求解决方案。
【解决方案2】:

这个库支持 Stream,所以你可以这样检查。

 LocationPermissions().serviceStatus.listen((event) {
    if(event == ServiceStatus.disabled){
      print('Location Disabled');
      }else{
      print('Location Enabled');
     });

祝你好运。

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2021-07-03
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2014-10-01
    • 2020-04-24
    相关资源
    最近更新 更多