HarmonyOS开发中的 权限申请拒绝问题?

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

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

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 512
1 个回答

具体解决方案:
1、可以使用二次申请授权接口,通过调用requestPermissionOnSetting()直接拉起权限设置弹框,引导用户授予权限
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
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() 
  } 
}

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题