1、如何申请精确定位
问题场景
在获取定位权限的场景中,申请了模糊和精准定位的权限['ohos.permission.APPROXIMATELY_LOCATION','ohos.permission.LOCATION'],其中模糊定位会弹出权限框,点击同意后在申请精准定位时,精准定位结果grantStatus返回2什么意思。
解决措施
精准定位结果grantStatus返回2,表示未授权,请求无效可能原因有:未在设置文件中声明目标权限、权限名非法、部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件。其他相应请求权限,返回的错误码,可参考PermissionRequestResult。
import { abilityAccessCtrl, common, PermissionRequestResult, Permissions } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { promptAction } from '@kit.ArkUI'; @Component export struct ApplyPrecisePositioning { permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION']; aboutToAppear(): void { this.reqPermissionsFromUser(this.permissions); } reqPermissionsFromUser(permissions: Array<Permissions>): void { let context: Context = getContext(this) as common.UIAbilityContext; let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => { let grantStatus: Array<number> = data.authResults; let length: number = grantStatus.length; for (let i = 0; i < length; i++) { if (grantStatus[i] === 0) { // 用户授权,可以继续访问目标操作 } else { // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 promptAction.showToast({ message: '用户拒绝授权' }); return; } } // 授权成功 }).catch((err: BusinessError) => { console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); }) } build() { } }