HarmonyOS 权限申请拒绝问题?

请问下权限申请拒绝后,通过 startAbility() 的方式跳转到了应用setting 界面,有几个问题

  1. 跳转过去,返回的时候不是直接返回应用,而是返回到设置程序上一页
  2. 只能跳转到应用主页,不能跳转到具体权限页面吗,比如定位权限之类
  3. 权限如果设置成功,怎么通知到应用呢,在非 UI 的类中如何操作,因为我是封装了一个权限管理器,有没有类似的回调之类的
阅读 420
1 个回答

1、可以使用二次申请授权接口,通过调用requestPermissionOnSetting()直接拉起权限设置弹框,引导用户授予权限

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/request-user-authorization-second-V5

2、这块目前也是不支持的,只可以先跳转到应用信息页面,由用户点击进入权限页面进行勾选

3、可以检测用户是否获取权限,demo示例如下:

//首先检测用户权限需要先获取Token,token是异步回调的
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
async accessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
  let atManager = abilityAccessCtrl.createAtManager()
  let grantStatus: abilityAccessCtrl.GrantStatus

  let tokenID: number
  try {
  let bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
  tokenID = bundleInfo.appInfo.accessTokenId
} catch (err) {
  console.log('location 获取地理位置token失败')
}

try {
  grantStatus = await atManager.checkAccessToken(tokenID,permission)
} catch (err) {
  console.log('获取地理位置token检测失败')
}

return grantStatus
}
//其次获取token后,开始查询用户权限状态
async checkPermission() {

  let permissions: Array<Permissions> = ['ohos.permission.LOCATION','ohos.permission.APPROXIMATELY_LOCATION']
  let locationStatus = await this.accessToken(permissions[0])
  let roximateyStatus = await this.accessToken(permissions[1])
  if (locationStatus == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED &&
    roximateyStatus == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
    console.log('location 已经申请完权限了')
  } else {
    console.log('location 需要申请权限')
    this.requestPermission()
  }
}
logo
HarmonyOS
子站问答
访问
宣传栏