如果我们的客户,在刚进去的时候,拒绝了权限,那么该是否授权的提示将不会再次出现,除非用户删除应用重新下载,为了避免我们的权限被拒绝后,不能再次向用户请求权限,我们需要对用户的系统权限进行二次授权弹窗询问。
1.如果用户在第一次授权时,选择拒绝,我们应该对用户进行退出该页操作,
router.back()
当然,如果该操作让你感到为难(偷笑),你可以直接对用户弹出二次授权操作(完成了第一步的小伙伴,在用户再次进入时后,进行判断,如果授权结果为false,就发起二次授权请求)。
示例代码如下:
import { abilityAccessCtrl } from '@kit.AbilityKit'
import { promptAction } from '@kit.ArkUI'
@Entry
@Component
struct AudioPage {
async aboutToAppear() {
// 1. 创建权限管理对象
const atManager = abilityAccessCtrl.createAtManager()
// 2. 弹窗授权窗口
const res = await atManager.requestPermissionsFromUser(getContext(this), ['ohos.permission.MICROPHONE'])
// 3. 判断用户是否授权
// abilityAccessCtrl.GrantStatus 枚举 0-PERMISSION_GRANTED(已授权) -1-PERMISSION_DENIED(未授权)
const flag = res.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
promptAction.showToast({ message: flag ? '已授权' : '已禁用' })
if (flag === false) {
// 这里是二次授权
const res = await atManager.requestPermissionOnSetting(getContext(this), ['ohos.permission.MICROPHONE'])
const flag = res.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
promptAction.showToast({ message: flag ? '二次授权成功' : '二次授权失败' })
}
}
build() {
Column() {
Row()
.height(200)
.width('100%')
Button('开始录音')
}
}
}
拓展:在用户进行拒绝权限时,我们可以给用户一个温馨提示,告知用户使用该功能需要权限。
温馨提示示例代码:
const confirm = await promptAction.showDialog({
title: "温馨提示",
message: "未授权使用麦克风将无法发送语音消息,是否前往设置进行授权?",
buttons: [
{ text: '离开', color: '#cccccc' },
{ text: '去授权', color: '#000' }
]
})