HarmonyOS 鸿蒙Next 断网情况下,获取地理位置信息一直卡住不执行

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 断网情况下,获取地理位置信息一直卡住不执行

我写了个获取地理位置信息的方法,权限已经有了,联网情况可以获取信息,但是断网情况一直卡到断点处不执行下去,设置了5s超时也没有用,这是为什么?

2 回复
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { geoLocationManager } from '@kit.LocationKit';

@Entry
@Component
struct Index {
  @State localText: string = '当前位置'
  permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'];

  getLocal() {
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    let atManager: abilityAccessCtrl.AtManager =
      abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, this.permissions).then((data) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
          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) => {
            let reverseGeocodeRequest: geoLocationManager.ReverseGeoCodeRequest = location;
            try {
              geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest).then((data) => {
                console.log('getAddressesFromLocation: ' + JSON.stringify(data));
                this.localText = data[0].placeName + ''
              }).catch((error: number) => {
                console.error('promise, getAddressesFromLocation: error=' + JSON.stringify(error));
              });
            } catch (err) {
              console.error("errCode:");
            }
          }).catch((err: Error) => {
            console.error(`Failed to get current location. Code is , message is ${err.message}`);
          });
        } else {
          // 用户拒绝授权 return;
        }
      }
      // 授权成功
    }).catch((err: Error) => {
      console.error(`Failed to request permissions from user. Code is , message is ${err.message}`);
    })
  }

  build() {
    Column() {
      Button(this.localText).onClick(() => {
        console.info('click ----- start');
        this.getLocal();
      })
    }
  }
}


在HarmonyOS(鸿蒙)系统中,当设备处于断网状态时,获取地理位置信息确实可能会受到影响,因为通常位置服务依赖于网络(如GPS卫星信号辅助的A-GPS、网络基站定位等)来实现更精确和快速的定位。如果设备断网且仅依赖纯GPS信号,定位速度可能会变慢甚至无法定位,特别是当处于信号不佳的环境中。

针对HarmonyOS鸿蒙Next版本,在断网情况下获取地理位置信息卡住的问题,这可能是由于系统定位服务在没有网络辅助时尝试使用纯GPS信号,但信号弱或无法锁定导致的。解决此类问题的一般方法包括:

  1. 确保设备处于开阔地带,以提高GPS信号接收质量。
  2. 检查设备GPS功能是否正常开启并处于良好工作状态。
  3. 考虑在软件设计中加入超时处理机制,当定位请求超过一定时间未响应时,给予用户相应提示或采取其他措施。

由于这涉及到系统级的功能和性能,开发者可能需要深入了解HarmonyOS的定位服务API及其在不同网络环境下的行为特性。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部