美文网首页Flutter
Flutter集成高德定位和地图功能

Flutter集成高德定位和地图功能

作者: A_si | 来源:发表于2021-07-20 21:10 被阅读0次

定位集成

配置高德定位依赖库

新建 Flutter 项目,使用 Android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> open Android module in Android Studio。

1.png

在 Android 工程里,切换为 Android 视图:

2.png

打开 build.gradle 文件,添加定位依赖包:

implementation('com.amap.api:location:5.2.0')
image.png

点击 Sync Now 或者 工具栏上的🐘图标同步依赖包:

image.png

打开清单文件AndroidManifest.xml,配置权限和服务:

    <!--访问网络-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--粗略定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--精确定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!--用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--用于写入缓存数据到扩展存储卡-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <!-- 配置定位Service -->
       <service android:name="com.amap.api.location.APSService"/>
image.png

配置签名文件

高德平台需要签名的 sha1 ,所以需要配置签名文件,debug 模式调试和正式包各需要一个,也可以使用同一个 keystore 。
工具栏 Build -> Generate Signed Bundle / APK -> 选择 APK -> Next -> Create new ,打开 New Key Store 窗口:

image.png
image.png

key store path 选择当前项目根目录或者你喜欢的任何目录,命名为 debug.keystore 或者你喜欢的名字,两个地方的 Password 可以一样,Alias 需要填写,下面的 Certificate 填写一项即可:

image.png

点击 ok -> 点击 Next,选择 debug ,当然如果 debug 和 release 使用同一个签名文件的话也可同时选择 debug 和 release,并勾选 V2 签名:

image.png

完成后可以看到项目里的 debug.keystore 文件:


image.png

重复上面方法,再创建一个 release.keystore 文件。点击 Project Structure:


image.png
选择 Modules -> app -> Signing Configs -> + -> 默认有 debug,再添加一个 release ,分别选择对应的 keystore: image.png

点击 ok 后再次打开 build.gradle 文件,可以看到签名配置对应刚才配置的签名文件:

signingConfigs {
        debug {
            storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/debug.keystore')
            storePassword '123456'
            keyAlias 'amap'
            keyPassword '123456'
        }
        release {
            storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/release.keytore')
            storePassword '123456'
            keyAlias 'amap'
            keyPassword '123456'
        }
    }

高德平台 Key 申请

打开高德开放平台 | 高德地图API (amap.com),注册成为高德开放平台用户,打开控制台创建一个应用,填入对应的信息,这里有个错误,SHA1 其实是 MD5 ,不要填写 SHA1。

image.png
获取MD5:
在刚才的项目里,打开 Terminal,输入下面命令,路径就是 debug.keystore 和 release.keystore的路径:
keytool -list -v -keystore  ./debug.keystore

输入秘钥库口令,就是设置的 Password ,复制 MD5 ,去高德开放平台粘贴。

image.png

发布版和调试版都设置后,复制 key 。

在清单文件里,配置apikey

    <!-- 配置定位Service -->
       <service android:name="com.amap.api.location.APSService"/>
       <meta-data
           android:name="com.amap.api.v2.apikey"
           android:value="f6c46787c43cb7df5510d9f4c530fd1e"/>

Flutter 文件配置

回到 Flutter 项目,添加高德定位库和权限申请依赖,执行pub get

  amap_flutter_location: ^2.0.0
  permission_handler:

在获取定位的入口配置权限申请,注册监听:

    /// 动态申请定位权限
    requestPermission();
    ///注册定位结果监听
    _locationListener = _locationPlugin
        .onLocationChanged()
        .listen((Map<String, Object> result) {
      setState(() {
        _locationResult = result;
      });
    });

只要获取到定位,这里都会回调,result包含了很全的定位信息。
如果运行报错:INVALID_USER_KEY,说明你的 keystore 的 MD5 不正确,也许平台会把 SHA1 改为真正的 SHA1 ,所以不妨试试填入 SHA1。

地图集成

Android工程添加地图依赖

回到 Android 工程,添加地图依赖:

    implementation 'com.amap.api:3dmap:5.0.0'

回到 Flutter 工程,在pubspec.yaml里添加插件依赖:

  amap_flutter_map: ^2.0.1

在布局中使用 map :

  final AMapWidget map = AMapWidget(
      onMapCreated: onMapCreated,
      // 定位小蓝点配置
      myLocationStyleOptions: MyLocationStyleOptions(true),
      // 是否指南针
      // compassEnabled: true,
    );

源码传送门

相关文章

  • Flutter集成高德定位和地图功能

    定位集成 配置高德定位依赖库 新建 Flutter 项目,使用 Android Studio 打开项目里的 and...

  • flutter项目集成了amap_flutter_locatio

    问题:在flutter项目中集成了高德定位flutter SDK,在iOS上运行第一次安装不会弹出定位请求弹窗。 ...

  • iOS开发之百度地图

    现在的应用,几乎都含有地图功能,但是往往系统地图功能达不到需求,所以需要集成高德地图和百度地图,而大部分iOS...

  • Flutter集成高德地图定位组件

    插件地址github:https://github.com/fluttify-project/amap_locat...

  • flutter 高德地图SDK 接入

    本篇为flutter 项目集成高德地图flutter插件,话不多说,直接上代码 iOS 端 创建账号 创建高德账号...

  • 2016.09.20日常记录

    项目修改地图功能组件,替换成高德的。高德地图库集成相对容易,库的版本管理比百度的清楚些,不会那么的混乱。 应用有A...

  • flutter集成高德地图

    安卓权限列表 flutter集成高德、百度等时候会用到apikey,调试版和正式版的md5获取方式 flutter...

  • 安卓jar包冲突问题

    前段时间Flutter集成高德的导航功能的时候,开始是使用的插件flutter_amap_plugin,但是发现它...

  • 获取SHA1

    今天遇到集成高德地图,不,是融云中的高德地图定位,填坑的。定位失败,一直提示定位失败,报错说key过期或者不正确。...

  • 百度地图定位迷之报错(latitude : 4.9E-324

    估计很多小伙伴们在开发的时候会用到定位和地图功能,用的最多的应该是百度地图和高德地图,这两天我在使用百度地图定位的...

网友评论

    本文标题:Flutter集成高德定位和地图功能

    本文链接:https://www.haomeiwen.com/subject/veurmltx.html