flutter集成高德地图获取位置

  • 准备工作
    • 在创建安卓应用
    • 获取SHA1
  • 获取当前位置
    • 添加依赖
    • 文件配置
      • build.gradle文件配置
      • AndroidManifest.xml配置
    • 获取定位

准备工作

高德开放平台地址https://lbs.amap.com/tools/picker

在创建安卓应用

  1. 在控制台我的应用中创建应用
  2. 点击添加

    由上图可以看出我们还需要获取安全码SHA1才能添加
    添加方法高德官方也已经给出
    https://lbs.amap.com/faq/android/map-sdk/create-project/43112

获取SHA1

这里我们采用的是使用 keytool(jdk自带工具)获取SHA1

  1. 在控制台输入cd .android定位到.android目录下
  2. 继续在控制台输入命令:调试版本使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore 发布版本使用 apk 对应的 keystore,命令为:keytool -list -v -keystore apk的keystore
  3. 按照要求输入密钥库口令,注意这里输入后是没有显示的
  4. 选择sha1复制即可(注意调试版安全码和发布版安全码我们可以都写成一样的)

准备工作完成后创建的应用如图

获取当前位置

添加依赖

高德定位Flutter插件地址https://pub.dev/packages/amap_flutter_location
添加依赖

dependencies:amap_flutter_location: ^3.0.0

导包

import 'package:amap_flutter_location/amap_flutter_location.dart';

权限检测插件地址https://pub.dev/packages/permission_handler

添加依赖

dependencies:permission_handler: ^8.3.0

导包

import 'package:permission_handler/permission_handler.dart';

文件配置

高德官方给出一定的指引https://developer.amap.com/api/flutter/gettingstarted

build.gradle文件配置

修改你的android/app/build.gradle文件配置签名文件以及配置 implementation

signingConfigs {release {//发布版本的签名配置//还要先将我们使用的androidkeystore.jks'导入到flutter_appone\android下storeFile file('androidkeystore.jks')keyAlias "key0"storePassword "20010101"keyPassword "20010101"}debug {//调试版本的签名配置storeFile file('androidkeystore.jks')keyAlias "key0"storePassword "20010101"keyPassword "20010101"}}buildTypes {release {// TODO: Add your own signing config for the release build.// Signing with the debug keys for now, so `flutter run --release` works.signingConfig signingConfigs.release}debug {// TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug}}

使用高德SDK之前配置可以参考高德官方文档https://developer.amap.com/api/android-location-sdk/guide/create-project/android-studio-create-project

dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"implementation "com.amap.api:location:latest.integration"
}
AndroidManifest.xml配置

android/app/src/main/AndroidManifest.xml下的配置

主要用于配置高德Key和申请权限:

在AndroidManifest.xml的application标签中配置Key:

  1. application标签中配置Key
<meta-data android:name="com.amap.api.v2.apikey" android:value="您的Key">
</meta-data>
  1. application标签中声明service组件
<service android:name="com.amap.api.location.APSService"></service>
  1. 在AndroidManifest.xml中配置权限:
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET" />  <!--允许获取精确位置,精准定位必选-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--允许获取粗略位置,粗略定位必选-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--允许获取设备和运营商信息,用于问题排查和网络定位(无gps情况下的定位),若需网络定位功能则必选-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!--允许获取网络状态,用于网络定位(无gps情况下的定位),若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许获取wifi网络信息,用于网络定位(无gps情况下的定位),若需网络定位功能则必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许获取wifi状态改变,用于网络定位(无gps情况下的定位),若需网络定位功能则必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!--后台获取位置信息,若需后台定位则必选-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!--用于申请调用A-GPS模块,卫星定位加速-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!--允许写设备缓存,用于问题排查-->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />  <!--允许写入扩展存储,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许读设备等信息,用于问题排查-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

获取定位

import 'package:flutter/material.dart';import 'dart:async';
// import 'dart:io';
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:permission_handler/permission_handler.dart';class LocationPage extends StatefulWidget {LocationPage({Key? key}) : super(key: key);_LocationPageState createState() => _LocationPageState();
}class _LocationPageState extends State<LocationPage> {//获取数据// Map<String, Object> _locationResult;String _latitude = ""; //纬度String _longitude = ""; //经度//监听定位late StreamSubscription<Map<String, Object>> _locationListener;//实例化插件AMapFlutterLocation _locationPlugin = new AMapFlutterLocation();@overridevoid initState() {// TODO: implement initStatesuper.initState();/// 动态申请定位权限requestPermission();AMapFlutterLocation.updatePrivacyAgree(true);AMapFlutterLocation.updatePrivacyShow(true, true);AMapFlutterLocation.setApiKey("4f72d5a172de996b05aace4eb52bd7cd", "ios ApiKey");///注册定位结果监听_locationListener = _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {setState(() {print(result);print("-----");print(result is Map);// _locationResult = result;_latitude = result["latitude"].toString();_longitude = result["longitude"].toString();});});}@overridevoid dispose() {super.dispose();///移除定位监听if (null != _locationListener) {_locationListener.cancel();}///销毁定位if (null != _locationPlugin) {_locationPlugin.destroy();}}///设置定位参数void _setLocationOption() {if (null != _locationPlugin) {AMapLocationOption locationOption = new AMapLocationOption();///是否单次定位locationOption.onceLocation = false;///是否需要返回逆地理信息locationOption.needAddress = true;///逆地理信息的语言类型locationOption.geoLanguage = GeoLanguage.DEFAULT;locationOption.desiredLocationAccuracyAuthorizationMode =AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;locationOption.fullAccuracyPurposeKey = "AMapLocationScene";///设置Android端连续定位的定位间隔locationOption.locationInterval = 2000;///设置Android端的定位模式<br>///可选值:<br>///<li>[AMapLocationMode.Battery_Saving]</li>///<li>[AMapLocationMode.Device_Sensors]</li>///<li>[AMapLocationMode.Hight_Accuracy]</li>locationOption.locationMode = AMapLocationMode.Hight_Accuracy;///设置iOS端的定位最小更新距离<br>locationOption.distanceFilter = -1;///设置iOS端期望的定位精度/// 可选值:<br>/// <li>[DesiredAccuracy.Best] 最高精度</li>/// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>/// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>/// <li>[DesiredAccuracy.Kilometer] 1000米</li>/// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>locationOption.desiredAccuracy = DesiredAccuracy.Best;///设置iOS端是否允许系统暂停定位locationOption.pausesLocationUpdatesAutomatically = false;///将定位参数设置给定位插件_locationPlugin.setLocationOption(locationOption);}}///开始定位void _startLocation() {if (null != _locationPlugin) {///开始定位之前设置定位参数_setLocationOption();_locationPlugin.startLocation();}}/// 动态申请定位权限void requestPermission() async {// 申请权限bool hasLocationPermission = await requestLocationPermission();if (hasLocationPermission) {print("定位权限申请通过");} else {print("定位权限申请不通过");}}///  申请定位权限  授予定位权限返回true, 否则返回falseFuture<bool> requestLocationPermission() 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;}}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("地理定位演示"),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [//  latitude: 36.570091461155336, longitude: 109.5080830206976//Text("纬度:${this._latitude}"),Text("经度:${this._longitude}"),SizedBox(height: 20),ElevatedButton(child: Text('开始定位'),onPressed: () {this._startLocation();},),],),),);}
}


flutter集成高德地图获取位置相关推荐

  1. flutter 使用 高德地图选取位置

    使用了两个官方插件: amap_flutter_map | Flutter Package amap_flutter_location | Flutter Package #高德定位 amap_flu ...

  2. vue 获取当前位置 高德_vue高德地图获取当前位置

    一:安装依赖 npm install vue-amap --save 二:main.js中的配置 import VueAMap from 'vue-amap'; Vue.use(VueAMap); V ...

  3. java api从高德地图获取某个位置的经纬度

    1.代码展示 import com.fasterxml.jackson.databind.JsonNode; import com.ning.http.client.AsyncHttpClient; ...

  4. Flutter 调用高德地图APP实现位置搜索、路线规划、逆地理编码

    1 开发准备 pubspec.yaml 配置文件中添加插件 dependencies:flutter:sdk: flutterurl_launcher: ^6.1.2 iOS 配置 info.plis ...

  5. Vue中集成高德地图API实现定位与自定义样式信息窗体

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662 在上面 ...

  6. Anuglar8集成高德地图

    Anuglar8集成高德地图 @我是一只小菜鸡传送门 Anuglar8集成高德地图github源码 一.自己新建一个angualr项目.emm-新建项目就不用教了吧. TODO- 二.开始搞事情吧 新 ...

  7. 高德地图 ——获取定位信息

    上一篇文章已经讲解了如何集成高德地图SDK:跳转链接 如何你想获取附近位置信息 关键字检索poi:跳转这儿 下面我们介绍下定位功能: 配置AndroidManifest文件 上一篇文章已经讲解清单文件 ...

  8. Android 集成高德地图

    需要完成效果:集成高德地图,实现定位功能,并且实时刷新位置,每25秒自动刷新位置. 布局: <?xml version="1.0" encoding="utf-8& ...

  9. Android中集成高德地图SDK实现地图定位和导航功能(二)

    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...

最新文章

  1. ModelSim几种不同的版本的区别
  2. 制图折断线_CAD制图初学入门之CAD标注时必须要区分的两个概念
  3. 从0到1带你手撸一个请求重试组件,不信你学不会!
  4. 碉堡了,独家首发Java核心知识点总结,超全!
  5. SuperMap iObject入门开发系列七管线横断面分析
  6. Rendezvous: A Search Engine for Binary Code
  7. SpringDataJPA学习笔记
  8. 整合SpringBoot + MybatisPlus 搭建JAVA多模块项目基本骨架
  9. 【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
  10. 给曾经爱过、正在爱着、将要爱的人们!
  11. BUUCTF·[MRCTF2020]天干地支+甲子·WP
  12. 海南大学838信号与系统专业课的感悟
  13. 利用window.location实现下载文档
  14. Python获取 当前目录、上一级目录
  15. <<浏览器工作原理与实践>>读书笔记
  16. 常用元器件使用方法1:DCDC降压芯片SY8303的使用方法
  17. csdn各种积分规则
  18. display和visibility的区别
  19. 在ubuntu20.04环境下安装opencv教程并测试
  20. 圣思园java.doc_Java Web学习历程-(基于圣思园视频教程)

热门文章

  1. BootstrapBlazor实战 Menu 导航菜单使用(2)
  2. (三)JMockit API:@Mocked -基础篇
  3. groupby.nth_熊猫groupby first vs groupby nth vs groupby head
  4. 2048小游戏编写思路
  5. three.js 控制动画进度 进度条拖拽控制
  6. 每日一思(2022.5.19)——前无古人后无来者
  7. shell-grammar
  8. SSL-ZYC 逃离洞穴
  9. 基于菜鸟教程重学HTML5部分
  10. 汇编笔记转自编程达人