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
- 将以下内容添加到您的“gradle.properties”文件中
android.useAndroidX=true
android.enableJetifier=true
- 确保您将“android/app/build.gradle”文件中的
compileSdkVersion设置为30
android {
compileSdkVersion 30
...
}
- 确保您将所有
android.依赖项替换为其AndroidX对应项(完整列表可在此处找到:迁移到AndroidX)。
权限
在Android上,您需要将ACCESS_COARSE_LOCATION或ACCESS_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_LOCATION或ACCESS_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'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);