|
@@ -6,11 +6,9 @@ import 'package:permission_handler/permission_handler.dart';
|
6
|
6
|
|
7
|
7
|
import 'amap/const_config.dart';
|
8
|
8
|
|
9
|
|
-Future requireLocation() async {
|
10
|
|
- AMapLocationOption locationOption = AMapLocationOption();
|
11
|
|
- final AMapFlutterLocation location = AMapFlutterLocation();
|
12
|
|
- location.setLocationOption(locationOption);
|
|
9
|
+typedef AMAPListener = void Function (Map<String, Object>);
|
13
|
10
|
|
|
11
|
+void showPrivacy() {
|
14
|
12
|
/// 设置是否已经包含高德隐私政策并弹窗展示显示用户查看,如果未包含或者没有弹窗展示,高德定位SDK将不会工作
|
15
|
13
|
///
|
16
|
14
|
/// 高德SDK合规使用方案请参考官网地址:https://lbs.amap.com/news/sdkhgsy
|
|
@@ -31,8 +29,10 @@ Future requireLocation() async {
|
31
|
29
|
///
|
32
|
30
|
/// [hasAgree] 隐私权政策是否已经取得用户同意
|
33
|
31
|
AMapFlutterLocation.updatePrivacyAgree(true);
|
|
32
|
+}
|
34
|
33
|
|
35
|
|
- // 判断定位权限
|
|
34
|
+// 判断定位权限
|
|
35
|
+Future _requirePermission() async {
|
36
|
36
|
PermissionStatus _permissionGranted = await Permission.location.status;
|
37
|
37
|
if (_permissionGranted == PermissionStatus.denied) {
|
38
|
38
|
// 如果未允许, 尝试申请一次
|
|
@@ -41,8 +41,93 @@ Future requireLocation() async {
|
41
|
41
|
throw Exception("请设置允许当前程序定位功能");
|
42
|
42
|
}
|
43
|
43
|
}
|
|
44
|
+}
|
44
|
45
|
|
45
|
|
- AMapFlutterLocation.setApiKey(ConstConfig.amapApiKeys.androidKey!, ConstConfig.amapApiKeys.iosKey!);
|
|
46
|
+Future requireLocation(AMAPListener listener) async {
|
|
47
|
+
|
|
48
|
+ await _requirePermission();
|
|
49
|
+ final AMapFlutterLocation location = AMapFlutterLocation();
|
|
50
|
+ location.onLocationChanged().listen(listener);
|
|
51
|
+ location.setLocationOption(_getAMapLocationOption());
|
|
52
|
+ location.startLocation();
|
46
|
53
|
|
47
|
54
|
return location;
|
48
|
55
|
}
|
|
56
|
+
|
|
57
|
+_getAMapLocationOption() {
|
|
58
|
+ AMapLocationOption locationOption = new AMapLocationOption();
|
|
59
|
+
|
|
60
|
+ ///是否单次定位
|
|
61
|
+ locationOption.onceLocation = false;
|
|
62
|
+
|
|
63
|
+ ///是否需要返回逆地理信息
|
|
64
|
+ locationOption.needAddress = true;
|
|
65
|
+
|
|
66
|
+ ///逆地理信息的语言类型
|
|
67
|
+ locationOption.geoLanguage = GeoLanguage.DEFAULT;
|
|
68
|
+
|
|
69
|
+ locationOption.desiredLocationAccuracyAuthorizationMode =
|
|
70
|
+ AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;
|
|
71
|
+
|
|
72
|
+ locationOption.fullAccuracyPurposeKey = "AMapLocationScene";
|
|
73
|
+
|
|
74
|
+ ///设置Android端连续定位的定位间隔
|
|
75
|
+ locationOption.locationInterval = 2000;
|
|
76
|
+
|
|
77
|
+ ///设置Android端的定位模式<br>
|
|
78
|
+ ///可选值:<br>
|
|
79
|
+ ///<li>[AMapLocationMode.Battery_Saving]</li>
|
|
80
|
+ ///<li>[AMapLocationMode.Device_Sensors]</li>
|
|
81
|
+ ///<li>[AMapLocationMode.Hight_Accuracy]</li>
|
|
82
|
+ locationOption.locationMode = AMapLocationMode.Hight_Accuracy;
|
|
83
|
+
|
|
84
|
+ ///设置iOS端的定位最小更新距离<br>
|
|
85
|
+ locationOption.distanceFilter = -1;
|
|
86
|
+
|
|
87
|
+ ///设置iOS端期望的定位精度
|
|
88
|
+ /// 可选值:<br>
|
|
89
|
+ /// <li>[DesiredAccuracy.Best] 最高精度</li>
|
|
90
|
+ /// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>
|
|
91
|
+ /// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>
|
|
92
|
+ /// <li>[DesiredAccuracy.Kilometer] 1000米</li>
|
|
93
|
+ /// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>
|
|
94
|
+ locationOption.desiredAccuracy = DesiredAccuracy.Best;
|
|
95
|
+
|
|
96
|
+ ///设置iOS端是否允许系统暂停定位
|
|
97
|
+ locationOption.pausesLocationUpdatesAutomatically = false;
|
|
98
|
+
|
|
99
|
+ return locationOption;
|
|
100
|
+}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+// import 'dart:io';
|
|
104
|
+//
|
|
105
|
+// import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'
|
|
106
|
+// show BMFMapSDK, BMF_COORD_TYPE;
|
|
107
|
+// import 'package:flutter_bmflocation/flutter_bmflocation.dart';
|
|
108
|
+// import 'package:permission_handler/permission_handler.dart';
|
|
109
|
+//
|
|
110
|
+// Future requireLocation() async {
|
|
111
|
+// // 判断定位权限
|
|
112
|
+// PermissionStatus _permissionGranted = await Permission.location.status;
|
|
113
|
+// if (_permissionGranted == PermissionStatus.denied) {
|
|
114
|
+// // 如果未允许, 尝试申请一次
|
|
115
|
+// _permissionGranted = await Permission.location.request();
|
|
116
|
+// if (_permissionGranted != PermissionStatus.granted) {
|
|
117
|
+// throw Exception("请设置允许当前程序定位功能");
|
|
118
|
+// }
|
|
119
|
+// }
|
|
120
|
+//
|
|
121
|
+// final LocationFlutterPlugin location = LocationFlutterPlugin();
|
|
122
|
+//
|
|
123
|
+// // 设置是否隐私政策
|
|
124
|
+// location.setAgreePrivacy(true);
|
|
125
|
+// BMFMapSDK.setAgreePrivacy(true);
|
|
126
|
+// if (Platform.isAndroid) {
|
|
127
|
+// // Android 目前不支持接口设置Apikey,
|
|
128
|
+// // 请在主工程的Manifest文件里设置,详细配置方法请参考官网(https://lbsyun.baidu.com/)demo
|
|
129
|
+// BMFMapSDK.setCoordType(BMF_COORD_TYPE.COMMON);
|
|
130
|
+// }
|
|
131
|
+//
|
|
132
|
+// return location;
|
|
133
|
+// }
|