HarmonyOS在SDK9版本下FA模型geolocation无法定位问题解决

本文最后更新于:2023年11月8日 中午

HarmonyOS在SDK9版本下FA模型geolocation无法定位问题解决

问题描述

已经在config.json中加入了ohos.permission.LOCATION权限声明,但是在实际开发中,我使用

1
2
3
4
geolocation.getCurrentLocation().then((result) => {
this.locationInfo = JSON.stringify(result);
this.blog.setTitle(this.locationInfo);
});

获取位置信息得不到结果

我使用的是API9FA模型,且手头现没有可供实机调试的API9设备,远程仿真设备调试多次崩溃,所以我先将此错误情况梳理如下

我们使用了如下图所示的两种方式(注释部分和未注释部分,参考来源)均未能得到弹窗,经过实测在DevEco 3.1.0.500 Beta2版本中上述功能无法正常使用,且调试窗口在requestPermissionsFromUser()方法(经过调试运行已确认是执行到此函数时报错)执行时返回401错误

解决过程

与华为客户服务工程师沟通后,梳理上述思路进行定位处理问题有三:

  • 上述方法一中参考文档来源于openHarmonyOS,与现行HarmonyOS不属于同一部门维护,不保证可用性,例如上述方法在HarmonyOS内就无法正常使用
  • HarmonyOS的SDK经过多次更新迭代,目前原先旧SDK已经全部弃用(401报错原因)
  • 上述问题仅属于接口变更问题

解决方法

在SDK9版本中引入了geoLocationManager()新调用方式,在config.json文件中声明ohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION权限后,使用getCurrentLocation(request?: CurrentLocationRequest): Promise<Location>方法即可弹窗并获得定位权限,下面给出我的例子,假设config.json中已经配置好所需权限和说明

获取权限部分

1
2
3
4
5
6
7
8
9
10
let context = featureAbility.getContext();
let array:Array<string> = ["ohos.permission.APPROXIMATELY_LOCATION","ohos.permission.LOCATION"];
//requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
context.requestPermissionsFromUser(array, 1).then(function(data) {
console.log("Permission data:" + JSON.stringify(data));
console.log("Permission data permissions:" + JSON.stringify(data.permissions));
console.log("Permission data result:" + JSON.stringify(data.authResults));
}, (err) => {
console.error('Failed to start ability', err.code);
});

获取定位部分

1
2
3
4
5
6
7
8
9
try{
geoLocationManager.getCurrentLocation().then((result) => {
console.log('current location: ' + JSON.stringify(result));
}).catch((error) => {
console.error("locationerror=" + JSON.stringify(error));
});
}catch (err){
console.error("locationerrorCode:" + err.code + ",errMessage:" + err.message);
}

变更为上述函数与接口后顺利弹窗并获取到位置信息

总结

  1. HarmonyOS接口变更还较为频繁,文档内部将各个SDK版本接口均罗列了出来,还需进一步完善分类
  2. ArkTS异步执行,获取权限时需要处理好权限授权以及获取定位的先后同步顺序关系
  3. 通过侧载JS的方式也可以利用第三方API获取大致的经纬度信息,留给各位自行探究

HarmonyOS在SDK9版本下FA模型geolocation无法定位问题解决
https://www.0error.net/2023/06/6594.html
作者
Jiajun Chen
发布于
2023年6月14日
许可协议