Android Studio 创建签名文件
创建密钥 (Create New Key Store) 签署您的应用程序
创建密钥并存储到制定的路径
创建应用并生成key
注册高德地图开发者账户 Android 如何获取 SHA1 值?
集成高德定位Flutter插件
打开 pubspec.yaml 文件 添加 amap_flutter_location (高德定位)、permission_handler (应用权限)、app_settings (app权限设置) 、location_service_check (是否开通gps) 插件依赖配置
amap_flutter_location: any # 高德Flutter定位插件 permission_handler: any #应用权限 app_settings: any #app权限设置 location_service_check: any #是否开通GPS判断是否开启定位权限
/// 申请定位权限 /// 授予定位权限返回true, 否则返回false FuturerequestLocationPermission() async { //获取当前的权限 var status = await Permission.location.status; if (status == PermissionStatus.granted) { //已经授权 return true; } else { //未授权则发起一次申请 status = await Permission.location.request(); if (status == PermissionStatus.granted) { return true; } else { return false; } } }判断是否开启GPS
... bool _isOpenGps = await LocationServiceCheck.checkLocationIsOpen; if(!_isOpenGps) { logV("定位权限申请通过"); AppSettings.openLocationSettings(); } ...动态申请定位权限
/// 动态申请定位权限 FuturerequestPermission() async { // 申请权限 bool hasLocationPermission = await requestLocationPermission(); if (hasLocationPermission) { bool _isOpenGps = await LocationServiceCheck.checkLocationIsOpen; if(!_isOpenGps) { logV("定位权限申请通过"); AppSettings.openLocationSettings(); } return _isOpenGps; } else { logV("定位权限申请不通过"); // 跳转到系统设置页 AppSettings.openAppSettings(); } return hasLocationPermission; }高德地图初始化
StreamSubscription AMapFlutterLocation? _locationPlugin = AMapFlutterLocation(); void amapLocaitonInit(IMapLocationResultCallBack? locationResultCallBack) { AMapFlutterLocation.updatePrivacyShow(true, true); AMapFlutterLocation.updatePrivacyAgree(true); AMapFlutterLocation.setApiKey("c9856efd6bae11ff6897cffede9af428", ""); ///iOS 获取native精度类型 if (Platform.isIOS) { requestAccuracyAuthorization(); } ///注册定位结果监听 _locationListener = _locationPlugin! .onLocationChanged() .listen((Map? result) { locationResultCallBack!(result); }); }开始定位
///开始定位 void startLocation() async { /// 检查是否开启GSP和定位权限 bool hasLocationPermission = await requestPermission(); if (hasLocationPermission) { _setLocationOption(); _locationPlugin!.startLocation(); } }停止定位
为了让定位不一直执行,当获取到定位数据时可以停止定位
///停止定位 void stopLocation() { _locationPlugin!.stopLocation(); }销毁定位
void amapLocationDispose() { ///移除定位监听 if (null != _locationListener) { _locationListener!.cancel(); } ///销毁定位 if (null != _locationPlugin) { _locationPlugin!.destroy(); } }
高德地图定位获取到的数据转换成Json字符串并用创建的.json文件保存起来,方便使用Navicat Preminum 生成表 。
创建LocationMapper.xml
里面存放了SQL查询的语句 (插入用户位置信息 、根据userId查询用户位置信息 、修改用户位置信息)
"1.0" encoding="UTF-8"?> "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">"com.xm.chat.dao.LocationMapper"> type="com.xm.chat.entity.admin.Location" id="BaseResultMap"> "callbackTime" column="callbackTime"/> "locationTime" column="locationTime"/> "locationType" column="locationType"/> "latitude" column="latitude"/> "longitude" column="longitude"/> "accuracy" column="accuracy"/> "altitude" column="altitude"/> "bearing" column="bearing"/> "speed" column="speed"/> "country" column="country"/> "province" column="province"/> "city" column="city"/> "district" column="