权限申请
-
abilityAccessCtrl.createAtManager
createAtManager(): AtManager
访问控制管理:获取访问控制模块对象 -
requestPermissionsFromUser
requestPermissionsFromUser(context: Context, permissionList: Array): Promise<PermissionRequestResult>
context 请求权限的UIAbility的Context。
permissionList 需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。
用于UIAbility拉起弹框请求用户授权。如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。
- GrantStatus
表示授权状态的枚举
名称 | 值 | 说明 |
---|---|---|
PERMISSION_DENIED | -1 | 未授权 |
PERMISSION_GRANTED | 0 | 已授权 |
async requestPermissions(permissions: Permissions[]) {
const atManager = abilityAccessCtrl.createAtManager()
const requestResult = await atManager.requestPermissionsFromUser(
getContext(),
permissions
)
const isAuth = requestResult.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
return isAuth === true ? Promise.resolve(true) : Promise.reject(false)
}
打开应用授权页
当我们无法拉取权限授权时,打开系统应用设置页,进行手动开启
- bundleManager.getBundleInfoForSelfSync
getBundleInfoForSelfSync(bundleFlags: number): BundleInfo
以同步方法根据给定的bundleFlags获取当前应用的BundleInfo。
openPermissionSettingsPage() {
const context = getContext() as common.UIAbilityContext
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
context.startAbility({
bundleName: 'com.huawei.hmos.settings', // 待启动Ability所在的应用Bundle名称
abilityName: 'com.huawei.hmos.settings.MainAbility', // 待启动Ability名称
uri: 'application_info_entry', // 打开 设置->应用和元服务
parameters: {
pushParams: bundleInfo.name // 打开应用详情页
}
})
}
通知权限申请
-
notificationManager.requestEnableNotification
requestEnableNotification(context: UIAbilityContext): Promise<void>
应用请求通知使能模态弹窗
通过try catch判断是否能够拉取通知授权弹窗,不能正常弹出去打开应用授权页 openPermissionSettingsPage()
检查是否授权
- checkAccessTokenSync
checkAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
校验应用是否被授予权限- tokenID 要校验应用的身份标识
- permissionName 需要校验的权限名称
通过map获取到权限列表的权限状态,通过判断every判断权限列表是否开启了权限
checkPermissions(permissions: Permissions[]) {
const atManager = abilityAccessCtrl.createAtManager()
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
const tokenID = bundleInfo.appInfo.accessTokenId
const grantStatus = permissions.map(item => atManager.checkAccessTokenSync(tokenID, item))
return grantStatus.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}