首页 > 其他分享 >HarmonyOS在SDK9版本下FA模型geolocation无法定位问题解决

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

时间:2023-06-14 14:05:12浏览次数:56  
标签:geolocation stringify console permission 定位问题 FA JSON 权限 data

问题描述

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

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

获取位置信息得不到结果

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

我们使用了如下图所示的两种方式(注释部分和未注释部分,参考来源来自https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/accesstoken-guidelines.md#stage%E6%A8%A1%E5%9E%8B-1)均未能得到弹窗,经过实测在DevEco 3.1.0.500 Beta2版本中上述功能无法正常使用,且调试窗口在requestPermissionsFromUser()方法(经过调试运行已确认是执行到此函数时报错)执行时返回401错误

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

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

解决过程

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

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

解决方法

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

获取权限部分

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

获取定位部分

try{
    geoLocationManager.getCurrentLocation().then((result) => {
      console.log('current location: ' + JSON.stringify(result));
    }).catch((error) => {
        console.error("locatinotallow=" + JSON.stringify(error));
        });
    }catch (err){
      console.error("locationerrorCode:" + err.code + ",errMessage:" + err.message);
    }

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

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

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

总结

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

标签:geolocation,stringify,console,permission,定位问题,FA,JSON,权限,data
From: https://blog.51cto.com/u_15567308/6476698

相关文章

  • error: failed to push some refs to如何解决
    解决办法方法一对于error:failedtopushsomerefsto‘远程仓库地址’1使用如下命令gitpull--rebaseoriginmaster2然后再进行上传:gitpush-uoriginmaster......
  • Error: Failed to download metadata for repo ‘appstream’ – CentOS 8
    错误:Error:Failedtodownloadmetadataforrepo'appstream':Cannotprepareinternalmirrorlist:NoURLsinmirrorlist解决办法:TomigratefromCentOS8toCentOSStream8,runthefollowingcommands:dnf--disablerepo'*'--enablerepo......
  • 搭建promtetheus+grafana性能监控环境
    环境准备CentOSLinuxrelease7.7.1908(Core)prometheus-2.36.2grafana-enterprise-9.0.2-1node_exporter-1.3.1mysqld_exporter-0.14.0备注:软件可以去清华镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/或者:https://download......
  • 自己动手写编译器:使用NFA识别字符串
    在前面章节中我们构建了NFA状态机,现在我们看看如何使用它来识别给定字符串是否合法。首先我们先构造如下正则表达式对应的NFA,在input文件的表达式部分输入:({D}*\.{D}|{D}\.{D}*)这个表达式的目的是识别浮点数,用我们前面做好的代码生成的NFA状态机如下:  这里我们需要引入两个......
  • Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
    像许多早期创业团队的CEO一样,Stefan也曾彻夜难眠,他与一名大学的同学和老师共同创立了MPEG-DASH标准,并以此为契机创立了Bitmovin——旨在通过易用的API来协助开发者创造更好的视频服务。他看好AI在视频交付过程中各个阶段发挥价值,他也惊叹国内的开发者的聪明才智与勤奋。文/Stefan......
  • R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计|附代码数据
    全文链接:http://tecdat.cn/?p=15929最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。风险价值VaR和损失期望值ES是常见的风险度量首先明确:时间范围-我们展望多少天?概率水平-我们怎么看尾部分布?在给定时间范围内的盈亏预测分布,示例如图1所示。 ......
  • ERROR: Failed building wheel for mysqlclient Running setup.py clean for mysqlc
    Itseemsthatthereisanerrorwhiletryingtoinstallthemysqlclientpackageandit'sfailingtobuildthewheel.Theerrormessageindicatesthatitcan'tfindthePython.hfile,whichisrequiredforbuildingCextensions.Toresolvethisi......
  • OneDelphi+OneFastClient+Oracle配合使用
    1、安装Oraclewin10下面安装Oracle10g,需要修改安装目录下面的oraparam.ini文件修改两处:[Windows-5.2-optional]后面增加内容:[Windows-6.1-required]#MinimumdisplaycoloursforOUItorunMIN_DISPLAY_COLORS=256#MinimumCPUspeedrequiredforOUI#CPU=......
  • 什么是Sparse by default for crates.io
    当Rustcrate发布到crates.io上时,可以启用“Sparsebydefault”特性,这意味着默认情况下,crate不会包含所有依赖项在上传到crates.io的最终包中。相反,它只会包含必要的直接依赖项来使crate正常运行。这个特性对于减少crate的大小和用户需要下载和安装的依赖项数量非常......
  • 【Azure 应用服务】Azure Data Factory中调用Function App遇见403 - Forbidden
    问题描述在AzureDataFactory(数据工厂)中,调用同在Azure中的FunctionApp函数,却出现403-Forbidden错误。截图如下:  问题解答访问AzureFunctionApp遇见403-Forbidden错误,这是因为FunctionApp启用了限制访问功能,在其中配置了允许访问的IP地址列表,而从ADF中发出的请求使用的I......