• Flutter 项目实战 高德定位计算距离并展示首页数据 (六)


    /  注册高德地图 (安卓)  /

    Android  Studio 创建签名文件

    Android 应用签名

    Signed APK

    Generate Signed Bundle or Apk

     创建密钥 (Create New Key Store)  签署您的应用程序

     创建签名

     密钥

     证书

     创建密钥并存储到制定的路径 

    密钥创建内容

    创建应用并生成key

    注册高德地图开发者账户 Android 如何获取 SHA1 值?

    /  获取定位信息  / 

    集成高德定位Flutter插件 

    打开 pubspec.yaml 文件 添加 amap_flutter_location (高德定位)permission_handler (应用权限)、app_settings (app权限设置) location_service_check (是否开通gps) 插件依赖配置

    1. amap_flutter_location: any # 高德Flutter定位插件
    2. permission_handler: any #应用权限
    3. app_settings: any #app权限设置
    4. location_service_check: any #是否开通GPS

     判断是否开启定位权限

    1. /// 申请定位权限
    2. /// 授予定位权限返回true, 否则返回false
    3. Future requestLocationPermission() async {
    4. //获取当前的权限
    5. var status = await Permission.location.status;
    6. if (status == PermissionStatus.granted) {
    7. //已经授权
    8. return true;
    9. } else {
    10. //未授权则发起一次申请
    11. status = await Permission.location.request();
    12. if (status == PermissionStatus.granted) {
    13. return true;
    14. } else {
    15. return false;
    16. }
    17. }
    18. }

     判断是否开启GPS

    1. ...
    2. bool _isOpenGps = await LocationServiceCheck.checkLocationIsOpen;
    3. if(!_isOpenGps) {
    4. logV("定位权限申请通过");
    5. AppSettings.openLocationSettings();
    6. }
    7. ...

    动态申请定位权限

    1. /// 动态申请定位权限
    2. Future requestPermission() async {
    3. // 申请权限
    4. bool hasLocationPermission = await requestLocationPermission();
    5. if (hasLocationPermission) {
    6. bool _isOpenGps = await LocationServiceCheck.checkLocationIsOpen;
    7. if(!_isOpenGps) {
    8. logV("定位权限申请通过");
    9. AppSettings.openLocationSettings();
    10. }
    11. return _isOpenGps;
    12. } else {
    13. logV("定位权限申请不通过");
    14. // 跳转到系统设置页
    15. AppSettings.openAppSettings();
    16. }
    17. return hasLocationPermission;
    18. }

    高德地图初始化 

    1. StreamSubscription>? _locationListener;
    2. AMapFlutterLocation? _locationPlugin = AMapFlutterLocation();
    3. void amapLocaitonInit(IMapLocationResultCallBack? locationResultCallBack) {
    4. AMapFlutterLocation.updatePrivacyShow(true, true);
    5. AMapFlutterLocation.updatePrivacyAgree(true);
    6. AMapFlutterLocation.setApiKey("c9856efd6bae11ff6897cffede9af428", "");
    7. ///iOS 获取native精度类型
    8. if (Platform.isIOS) {
    9. requestAccuracyAuthorization();
    10. }
    11. ///注册定位结果监听
    12. _locationListener = _locationPlugin!
    13. .onLocationChanged()
    14. .listen((Map? result) {
    15. locationResultCallBack!(result);
    16. });
    17. }

    开始定位

    1. ///开始定位
    2. void startLocation() async {
    3. /// 检查是否开启GSP和定位权限
    4. bool hasLocationPermission = await requestPermission();
    5. if (hasLocationPermission) {
    6. _setLocationOption();
    7. _locationPlugin!.startLocation();
    8. }
    9. }

    停止定位 

    为了让定位不一直执行,当获取到定位数据时可以停止定位

    1. ///停止定位
    2. void stopLocation() {
    3. _locationPlugin!.stopLocation();
    4. }

    销毁定位 

    1. void amapLocationDispose() {
    2. ///移除定位监听
    3. if (null != _locationListener) {
    4. _locationListener!.cancel();
    5. }
    6. ///销毁定位
    7. if (null != _locationPlugin) {
    8. _locationPlugin!.destroy();
    9. }
    10. }

    /  定位数据创建MySQL表  / 

    高德地图定位获取到的数据转换成Json字符串并用创建的.json文件保存起来,方便使用Navicat Preminum 生成表 。

     

     

     

     

     /  个人位置信息插入、修改  /

    创建LocationMapper.xml

    里面存放了SQL查询的语句 (插入用户位置信息 、根据userId查询用户位置信息 、修改用户位置信息)

    1. "1.0" encoding="UTF-8"?>
    2. "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. "com.xm.chat.dao.LocationMapper">
    4. type="com.xm.chat.entity.admin.Location" id="BaseResultMap">
    5. "callbackTime" column="callbackTime"/>
    6. "locationTime" column="locationTime"/>
    7. "locationType" column="locationType"/>
    8. "latitude" column="latitude"/>
    9. "longitude" column="longitude"/>
    10. "accuracy" column="accuracy"/>
    11. "altitude" column="altitude"/>
    12. "bearing" column="bearing"/>
    13. "speed" column="speed"/>
    14. "country" column="country"/>
    15. "province" column="province"/>
    16. "city" column="city"/>
    17. "district" column="
  • 相关阅读:
    js页面window.onload()=$(function(){}) 和$(docunment).ready(function(){})
    【MAX7800实现KWS20 demo演示】
    Python pyintsaller打包异常 type object ‘Callable‘ has no attribute ‘_abc_registry‘
    Java多线程的知识点
    【opencv】图片背景去除处理与图片合成
    机器学习入门与实践:从原理到代码
    【JavaSE】异常处理
    短视频被替代的趋势-今抖云创
    Gateway--服务网关
    【olympic】编译qca-athdiag出现The LIC_FILES_CHKSUM does not match问题分析及解决方案
  • 原文地址:https://blog.csdn.net/u013491829/article/details/126568620