本文原创发布在华为开发者社区。
介绍
本示例利用 @ohos.geoLocationManager 通过位置服务获取当前设备所处的地理位置及经纬度,设置精准定位开关可获取精准位置。
效果预览
使用说明
- 点击“获取当前位置”的按钮,点击按钮出现是否允许应用获取地理位置的弹窗,允许之后可获取当前位置。
- 应用设置获取精准定位的开关,打开开关获取精准位置,精准度在米级别。
实现思路
用户允许获取定位的弹窗
定位前检查是否已经获取用户授权访问设备位置信息,如未获得授权,向用户申请需要的位置权限。
- ohos.permission.APPROXIMATELY_LOCATION:用于获取模糊位置,精确度为5公里。
- ohos.permission.LOCATION:用于获取精准位置,精准度在米级别。
获取当前位置
使用@ohos.geoLocationManager接口获取设备位置的经纬度,再将经纬度转换成实际位置。核心代码如下,源码参考
Index.ets
let locationChange = (err: BusinessError, location: geoLocationManager.Location) => {
// 获取经纬度
if (location.latitude === 0 && location.longitude === 0) {
return;
}
// 将经纬度转成实际位置
let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = {
'locale': this.locale.toString().includes('zh') ? 'zh' : 'en',
'latitude': location.latitude,
'longitude': location.longitude,
'maxItems': 1
};
geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then(data => {
if (data[0].placeName) {
this.message = this.message + data[0].placeName;
}
}).catch((err: Error) => {
Logger.error('GetAddressesFromLocation err ' + JSON.stringify(err));
});
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。