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