Flutter geolocator_cn 插件

功能

  • Location service helper class that can use multiple location services at the same time.

    • 系统 ✅
    • 百度 ✅
    • 高德 ✅
    • IP定位✅
  • 自动处理权限请求。

  • 在中国大陆自动将CRS转换为GCJ02。
    或者您可以手动设置CRS

入门

将此添加到您的包的pubspec.yaml文件中

dependencies:
  geolocator_cn: ^1.1.0

配置

1. 配置项目工作区

Android

AndroidX

  1. 将以下内容添加到您的“gradle.properties”文件中

android.useAndroidX=true
android.enableJetifier=true
  1. 确保您将“android/app/build.gradle”文件中的compileSdkVersion设置为30

android {
  compileSdkVersion 30

  ...
}
  1. 确保您将所有android.依赖项替换为其AndroidX对应项(完整列表可在此处找到:迁移到AndroidX)。

权限

在Android上,您需要将ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限添加到您的Android Manifest中。为此,请打开AndroidManifest.xml文件(位于android/app/src/main下),并将以下两条线之一添加为<manifest>标签的直接子项(当您配置了这两个权限时,ACCESS_FINE_LOCATION将被geolocator插件使用)。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

从Android 10开始,如果您想在App在后台运行时继续接收更新,则需要将ACCESS_BACKGROUND_LOCATION权限(与ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限一起)添加到您的Android Manifest中(请注意,geolocator插件不支持在后台运行时接收和处理位置更新)。

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

注意:指定ACCESS_COARSE_LOCATION权限会以大约相当于一个街区街区的位置精度提供位置更新。在您获得第一次位置修复之前,可能需要很长时间(几分钟),因为ACCESS_COARSE_LOCATION将仅使用网络服务来计算设备的位置。更多信息可在此处找到。

iOS

在iOS上,您需要将以下条目添加到Info.plist文件(位于ios/Runner下),以便访问设备的的位置。只需打开您的Info.plist文件并添加以下内容(确保更新描述,使其在您的App的上下文中具有意义)。

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>

如果您希望在App在后台运行时接收更新,您还需要将Background Modes功能添加到您的XCode项目中(Project > Signing and Capabilities > “+ Capability”按钮),然后选择Location Updates。对此要小心,您需要向Apple详细说明为什么您的App需要此功能,才能将其提交到AppStore。如果Apple不满意该解释,您的App将被拒绝。

当使用requestTemporaryFullAccuracy({purposeKey: "YourPurposeKey"})方法时,应将字典添加到Info.plist文件中。

<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
  <key>YourPurposeKey</key>
  <string>The example App requires temporary access to the device&apos;s precise location.</string>
</dict>

第二个键(在本例中为YourPurposeKey)应与在requestTemporaryFullAccuracy()方法中传递的purposeKey匹配。可以为您的App中的不同功能定义多个键。更多信息可在Apple的文档中找到。

注意:首次请求临时完整精度访问时,弹窗可能需要几秒钟才能显示。这是因为iOS正在确定用户确切位置,这可能需要几秒钟。不幸的是,这超出了我们的控制范围。

2. 配置百度LBS SDK API密钥

编辑android/app/src/Manifest.xml,并在<Application>节点中添加以下代码

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="YOUR API KEY" />

3. 配置高德Android依赖

编辑android/app/build.gradle,将此添加到依赖项中

dependencies
{
    implementation 'com.amap.api:location:5.6.0'
}

用法

import 'package:geolocator_cn/geolocator_cn.dart';

GeolocatorCNProviders.config = {
      'baidu': {'ios': 'YOUR API KEY'},
      'amap': {'ios': 'YOUR API KEY', 'android': 'YOUR API KEY'},
    };

GeolocatorCN().getLocation().then((location) {
      print(location);
    });

或者

import 'package:geolocator_cn/geolocator_cn.dart';

GeolocatorCNProviders.config = {
      'baidu': {'ios': 'YOUR API KEY'},
      'amap': {'ios': 'YOUR API KEY', 'android': 'YOUR API KEY'},
    };

LocationData location = await GeolocatorCN().getLocation();
print(location);

GitHub

查看 Github