使用LocationButton位置控件,首次点击应用中的位置控件,系统将弹窗请求用户授权,如果用户点取消,弹窗消失,应用无授权,用户再次点击位置控件时将会重新弹窗;用户点击允许,弹窗消失,应用将被授予临时位置权限,此后点击该应用的位置控件将不会弹窗。精准定位的临时授权会持续到灭屏、应用切后台、应用退出等任一情况发生,然后恢复到临时授权之前的授权状态。
核心步骤:1.整合LocationButton获取经纬度。2.通过Location kit将经纬度转为地址信息。3.将地址渲染到页面上。4.如果未开启定位将会闪退,处理闪退情况,用try catch。
LocationButton({
icon: LocationIconStyle.LINES
})
.backgroundColor(Color.White)
.iconColor(Color.Blue)
.onClick((event: ClickEvent, result: LocationButtonOnClickResult) => {
if (result === LocationButtonOnClickResult.SUCCESS) {
try {
// 免去权限申请和权限请求等环节,获得临时授权,获取位置信息授权
const requestInfo: geoLocationManager.LocationRequest = {
'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX,
'scenario': geoLocationManager.LocationRequestScenario.UNSET,
'timeInterval': 1,
'distanceInterval': 0,
'maxAccuracy': 0
};
geoLocationManager.getCurrentLocation(requestInfo)
.then((location: geoLocationManager.Location) => {
// promptAction.showToast({ message: JSON.stringify(location) });
const latitude = location.latitude
const longitude = location.longitude
let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest =
{ latitude, longitude, "maxItems": 1 };
try {
geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest)
.then((data) => {
// Logger.info('getAddressesFromLocation: ' + JSON.stringify(data));
this.addForm.address = data[0].placeName!
})
.catch((error: BusinessError) => {
Logger.error('promise, getAddressesFromLocation: error=' + JSON.stringify(error));
});
} catch (err) {
console.error("errCode:" + JSON.stringify(err));
}
})
.catch((err: BusinessError) => {
console.error(`Failed to get current location. Code is ${err.code}, message is ${err.message}`);
});
} catch (e) {
if (e.code === '3301100') {
promptAction.showToast({
message: '请开启定位开关~'
})
}
}
} else {
promptAction.showToast({ message: '获取位置信息失败!' })
}
})
标签:定位,err,鸿蒙,获取,location,error,message,geoLocationManager,弹窗
From: https://blog.csdn.net/LexinZong/article/details/142203911