本文主要的目的是获取当前设备所在的经纬度:
1.直接新建Flutter项目,添加依赖引用:
amap_location_fluttify: 0.4.0+82a2243
permission_handler: 4.0.0
amap_location_fluttify:用来获取位置,
permission_handler:检测位置权限
flutter packages get/Packages get
两个需要搭配着使用。
import 'package:amap_location_fluttify/amap_location_fluttify.dart';
import 'package:permission_handler/permission_handler.dart';
2.去高德地图创建一个key:高德地图key
这里的发布版SHA1可以在cmd/PowerShel里面获取
cd .android
keytool -v -list -keystore C:/Users/你的用户名/.android/debug.keystore
密码可以输入android 也可以不输
3.配置权限和key
<!-- GPS定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="3a5c0d9b04ea2379d7cee9823c614199"/>
</application>
原来的文件就有 直接赋值进去就可以了。
4.在程序中
void getLocationInfo()async{
setState(() {
_locationInfo+="开始定位。。。\n";
});
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.location);
ServiceStatus serviceStatus = await PermissionHandler().checkServiceStatus(PermissionGroup.location);
// 单次定位
if(serviceStatus==ServiceStatus.enabled){
if (permission==PermissionStatus.granted) {
setState(() {
_locationInfo+="取得定位权限...\n";
});
final location = await AmapLocation.fetchLocation();
location.latLng.then((val){
setState(() => _locationInfo += "纬度:${getLat_LngStr(val.latitude)}\n经度:${getLat_LngStr(val.longitude)}");
});
}else{
setState(() {
_errorINfo+="未取得定位权限...";
});
}
}else{
setState(() {
_errorINfo+="未开启定位...";
});
}
}
///转换度分秒
String getLat_LngStr(double degree) {
String str = "";
int de = degree.floor(); //整数部分
int min = ((degree - de) * 60).floor(); //分
double sec = ((degree - de) * 60 - min) * 60; //秒
// str="$de°$min′${sec.toStringAsFixed(4)}″";//秒保留4位
str = "$de ° $min′ $sec″"; //秒保留4位
print(degree);
print(str);
return str;
}
运行效果: