如果应用使用场景不需要实时的设备位置,可以获取系统缓存的最近一次历史定位结果。参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/location-guidelines-V5参考以下代码:import geoLocationManager from '@ohos.geoLocationManager'; import BusinessError from "@ohos.base"; import abilityAccessCtrl from "@ohos.abilityAccessCtrl"; @Entry @Component export struct Location { atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager() build() { Column() { // 在module.json5里申明ohos.permission.LOCATION,ohos.permission.APPROXIMATELY_LOCATION权限 Button('获取当前定位授权') .onClick(() => { const context = getContext() this.atManager.requestPermissionsFromUser(context, ['ohos.permission.LOCATION','ohos.permission.APPROXIMATELY_LOCATION'], (err, data) => { data.authResults.forEach(item => { if (item === 0) { console.log(`tag: 权限申请成功`); } else { console.log(`tag: 权限申请失败`); } }) }) }) Button('判断定位位置是否使能') .onClick(() => { try { let locationEnabled = geoLocationManager.isLocationEnabled(); console.log(`tag: locationEnabled = ${locationEnabled}`) } catch (err) { console.error("tag: errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message); } }) Button('获取当前定位') .onClick(() => { let requestInfo:geoLocationManager.CurrentLocationRequest = {'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX, 'scenario': geoLocationManager.LocationRequestScenario.UNSET,'maxAccuracy': 0}; try { geoLocationManager.getCurrentLocation(requestInfo).then((result) => { console.log('tag: current location: ' + JSON.stringify(result)); this.getAddresses(result.latitude, result.longitude) }) .catch((error:number) => { console.error('tag: promise, getCurrentLocation: error=' + JSON.stringify(error)); }); } catch (err) { console.error("tag: errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message); } }) } } getAddresses (latitude: number, longitude: number) { let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": latitude, "longitude": longitude, "maxItems": 1}; geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { if (err) { console.error('tag: getAddressesFromLocation: err=' + JSON.stringify(err)); } if (data) { console.log('tag: getAddressesFromLocation: data=' + JSON.stringify(data)); const address = data.shift() as geoLocationManager.GeoAddress console.log(`tag: 国家信息 ${address.countryName}}`) console.log(`tag: 国家码信息 ${address.countryCode}}`) console.log(`tag: 省份 ${address.administrativeArea}}`) } }); } }
如果应用使用场景不需要实时的设备位置,可以获取系统缓存的最近一次历史定位结果。参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/location-guidelines-V5
参考以下代码: