HarmonyOS 获取当前位置的省份?

需求是获取设备当前位置的省份,有什么解决方案吗?

阅读 497
1 个回答

如果应用使用场景不需要实时的设备位置,可以获取系统缓存的最近一次历史定位结果。参考文档:

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}}`)
      }
    });
  }
}