android拍照上显示定位_Flutter 实现高德定位
笔者之前在React-native 和Flutter 两个框架里纠结到底用什么来做下一个版本的APP,React-native 我之前也搭建了环境看了看文档感觉上手不会很困难因为自己会React, 笔者以前是做原生android开发的,做的时间不算长就转前端了.对于android部分的原生知识还算了解,于是大胆的开始了学习flutter.学习flutter之前我写了一个原生的a...
笔者之前在React-native 和Flutter 两个框架里纠结到底用什么来做下一个版本的APP,
React-native 我之前也搭建了环境看了看文档感觉上手不会很困难因为自己会React, 笔者以前是做原生android开发的,做的时间不算长就转前端了.对于android部分的原生知识还算了解,于是大胆的开始了学习flutter. 学习flutter之前我写了一个原生的andriod项目. 和一个flutter的项目,同样的功能,布局,原生的应用只有2M不到, 而flutter居然有10M 暂时让我有点吃惊,但是两者的速度几乎没有任何差别,于是花了几天的时间过了一遍Dart语言.然后就开始学习flutter的布局.可以这样的说我写过xml , Jsx . html, css 但是flutter的嵌套布局完全刷新了我的认知.
全新的语法,布局里面又有点flex的影子.css的大部分属性还是能直接看懂.由于flutter中文网暂时来说不是非常的完善,部分文档没有中文.所以自己干脆就直接上了flutter官方开始漫长的入坑.
这里步入正题.flutter中使用高德提供的插件,实现定位功能.
https://pub.dev/packages/amap_location 这是插件的链接
导入下载插件就不需要多说了吧.先来看看文档
1.先申请一个apikeyhttp://lbs.amap.com/api/android-sdk/guide/create-project/get-key
2.绑定key和SHA1
如何查看SHA1:https://lbs.amap.com/api/android-sdk/guide/create-project/get-key#sha1
准备工作就绪之后首先配置gradle
项目目录/app/build.gradle
android {
.... 你的代码
defaultConfig {
.....
manifestPlaceholders = [
AMAP_KEY : "aa9f0cf8574400f2af0078392c556e25", /// 高德地图key
]
}
...你的代码
dependencies {
/// 注意这里需要在主项目增加一条依赖,否则可能发生编译不通过的情况
implementation 'com.amap.api:location:latest.integration'
...你的代码
}
配置完成之后开始导入
import 'package:amap_location/amap_location.dart';
getLocation() async{
获取定位是异步操作,使用 async await 是最简单的官方文档也是这样写的
1.启动
2.获取定理位置
await AMapLocationClient.startup(new AMapLocationOption( desiredAccuracy:CLLocationAccuracy.kCLLocationAccuracyHundredMeters ));
await AMapLocationClient.getLocation(true);
}
在这里获取定位里面有一个坑.由于原生的模拟器非常的消耗资源,笔者用了第三方的模拟器,我用的是夜神.在android6.0之后,定位,拍照等等权限需要手动去拉权限,用户同意了之后应用程序才有权限去获取地理位置.然后第三方模拟器为了追求稳定,sdk的版本比较低.可以直接获取定位,所以在真机调试的经纬度打印出来一直是null,我还怀疑是不是key的问题.最后翻了android的文档之后发现,6.0之后必须要用户授权才能获取定位.所以开发的时候要用到对应的权限先去看看文档,是否要用户授权,如果需要先去拉取授权,拉去授权的方式很多种.官方也有推荐
void _checkPersmission() async{
bool hasPermission = await SimplePermissions.checkPermission(Permission.WhenInUseLocation);
if(!hasPermission){
bool requestPermissionResult = await SimplePermissions.requestPermission(Permission.WhenInUseLocation);
if(!requestPermissionResult){
Alert.alert(context,title: "申请定位权限失败");
return;
}
}
AMapLocationClient.onLocationUpate.listen((AMapLocation loc) {
if (!mounted) return;
setState(() {
location = getLocationStr(loc);
});
});
AMapLocationClient.startLocation();
}
拉取授权之后,就不会报错了.
我打印的是city和citycode
定位非常的精确
更多推荐
所有评论(0)