1 应用权限概述
鸿蒙开发中,调用部分API时使用申请权限后 才能能调用
申请应用权限时 需要注意两个关键点
1 权限级别
官方应用权限文档
2 授权方式
system_grant(系统授权) 自动授权:
system_grant指的是系统授权类型,在该类型的权限许可下,应用被允许访问的数据不会涉及到用户或设备的敏感信息,应用被允许执行的操作对系统或者其他应用产生的影响可控。
如果在应用中申请了system_grant权限,那么系统会在用户安装应用时,自动把相应权限授予给应用
user_grant(用户授权) 会有弹窗 需要签名证书:
user_grant指的是用户授权类型,在该类型的权限许可下,应用被允许访问的数据将会涉及到用户或设备的敏感信息,应用被允许执行的操作可能对系统或者其他应用产生严重的影响。
该类型权限不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应权限,从而成功访问操作目标对象。
2 申请system_grant 用户权限
配置声明权限
1 需要配置声明 在module.json5中
// 权限级别: normal
// 授权方式: user_grant
{
"name": "ohos.permission.READ_CALENDAR", // 只读日历
"reason": '$string:permission_reason_calendar',
"usedScene": {}
},
{
"name": "ohos.permission.WRITE_CALENDAR", // 写入日历
"reason": '$string:permission_reason_calendar',
"usedScene": {}
},
2 配置声明注意还需要添加授权原因 如:用于做某事....
检查是否已经授权
1 程序访问控制管理 核心APIcreateAtManager
2
校验应用是否被授予权限 核心API
checkAccessTokenSync
// 1 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager()
// 2 获取 bundle 包的信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 3 提取 tokenID 标识
const tokenID = bundleInfo.appInfo.accessTokenId
// 4 核心代码 校验应用是否被授予权限 -1:没有权限 0:获取到权限
const grantStatus = atManager.checkAccessTokenSync(tokenID,"ohos.permission.READ_CALENDAR")
向用户申请授权 只有首次申请才会弹窗
1 程序访问控制管理
2 弹窗请求用户授权 核心API
requestPermissionsFromUser 两个必填参数 1 获取上下文 2 需要校验的权限名称
// 1 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager()
// 2 拉起弹窗请求用户授权 -> 应用首次申请时才会弹窗
const grantStatus =await atManager.requestPermissionsFromUser(getContext(),填写需要校验的权限名称)
授权结果
如果用户在弹窗中拒绝了授权 鸿蒙没有内置的开启授权 需要引导用户去设置页面开启
1 获取上下文 通过as 断言 common.UIAbilityContext 后续使用
2 获取到包信息
3 打开设置页面(常规写法 直接 CV)
// 1 获取到上下文
// 并通过 as 断言为 UIAbilityContext,UIAbilityContext 才能调用 startAbility 这个 API
const context = getContext() as common.UIAbilityContext
// 2 获取 bundle 包信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 3 打开系统设置页
context.startAbility({
// 打开设置页的固定写法
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters:{
// 按照包名 :打开对应的应用页的详情页面
pushParams:bundleInfo.name
}
以上就是我个人见解 本人小白一名 如有错的地方 敬请谅解 欢迎大家补充 感谢