HarmonyOS鸿蒙NEXT中动态授权失败后如何引导用户跳转权限设置页
HarmonyOS鸿蒙NEXT中动态授权失败后如何引导用户跳转权限设置页 HarmonyOS NEXT中动态授权失败后如何引导用户跳转权限设置页并拉取跳转到系统设置页
这是我以前上课讲的代码,你参考下:
Button('获取经纬度')
.onClick(async () => {
try {
// 获取当前位置(需用户授权后才能被调用)
const res = await geoLocationManager.getCurrentLocation()
} catch (err) {
// 捕获错误:
// {"code": 201 } 用户未授权或拒绝授权
// {"code": "3301100" } 位置功能的开关未开启,模拟器下拉控制中心,打开定位开关
// {"code": 3301200 } 定位失败,未获取到定位结果
console.log('itheima666', JSON.stringify(err))
// switch 处理错误情况,code 数据类型有坑
switch (Number((err as BusinessError).code)) {
case 201: {
// promptAction.showToast({ message: '用户未授权或拒绝授权' })
// 打开授权设置(二次申请授权)
// request 申请
// Permissions 权限
// On 打开
// Setting 设置
const manager = abilityAccessCtrl.createAtManager()
// 首次授权(首次申请会有弹窗并返回授权结果,二次申请无弹窗只返回授权结果)
const res = await manager.requestPermissionsFromUser(getContext(), [
'ohos.permission.APPROXIMATELY_LOCATION',
'ohos.permission.LOCATION'
])
console.log('itheima666', JSON.stringify(res, null, 2))
// promptAction.showToast({ message: JSON.stringify(res, null, 2) })
// dialogShownResults true 首次弹窗,false 非首次弹窗,非首次弹窗需打开设置页
if (res.dialogShownResults?.includes(false) && res.authResults.includes(-1)) {
// 二次授权
manager.requestPermissionOnSetting(getContext(), [
'ohos.permission.APPROXIMATELY_LOCATION',
'ohos.permission.LOCATION'
])
}
break
}
case 3301100: {
promptAction.showToast({ message: '请在下拉控制中心,开启位置开关' })
break
}
default: {
promptAction.showToast({ message: '定位失败,已上报错误编码到服务端' })
break
}
}
}
})
更多关于HarmonyOS鸿蒙NEXT中动态授权失败后如何引导用户跳转权限设置页的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS NEXT中,如果动态授权失败,可以通过以下步骤引导用户跳转到权限设置页面:
-
检查权限状态:首先使用
abilityAccessCtrl
模块中的requestPermissionsFromUser
方法请求权限。如果权限请求被拒绝,可以检测到权限状态为PERMISSION_DENIED
。 -
提示用户:通过
promptAction
模块的showToast
方法,向用户显示提示信息,告知用户需要开启相应权限。 -
跳转权限设置页面:使用
appManager
模块中的openAppSetting
方法,直接跳转到应用的权限设置页面。该方法会打开系统设置中的应用权限管理界面,用户可以在该界面中手动开启所需权限。
示例代码如下:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import promptAction from '@ohos.promptAction';
import appManager from '@ohos.appManager';
// 请求权限
let permissions: Array<string> = ['ohos.permission.CAMERA'];
abilityAccessCtrl.requestPermissionsFromUser(permissions).then((data) => {
if (data.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
// 提示用户
promptAction.showToast({
message: '需要开启相机权限',
duration: 2000
});
// 跳转权限设置页面
appManager.openAppSetting({
bundleName: 'com.example.myapp'
});
}
});
通过以上步骤,可以在动态授权失败后引导用户跳转到权限设置页面,手动开启所需权限。
在HarmonyOS鸿蒙NEXT中,若动态授权失败,可通过ohos.abilityAccessCtrl
模块的requestPermissionsFromUser
方法请求权限。若用户拒绝授权,可使用ohos.app.Context
的startAbility
方法,通过隐式意图跳转到系统设置页面。示例如下:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import featureAbility from '@ohos.ability.featureAbility';
async function requestPermission() {
const permissions = ['ohos.permission.CAMERA'];
const atManager = abilityAccessCtrl.createAtManager();
try {
await atManager.requestPermissionsFromUser(globalThis.abilityContext, permissions);
} catch (err) {
const want = {
action: 'action.settings.app.info',
parameters: { packageName: globalThis.abilityContext.abilityInfo.bundleName }
};
featureAbility.startAbility({ want });
}
}
此代码首先请求权限,若失败则跳转到应用的权限设置页面。