HarmonyOS-权限请求

2024-08-23  本文已影响0人  有没有口罩给我一个
/**
 * 需要记住的是,申请运行时权限需要在module.json5中配置权限
 */
export class PermissionUtils {
  static async checkAnRequestPermission(
permissionList: Array<Permissions>, isToSettingsPage: boolean = true): Promise<boolean> {
const manager = abilityAccessCtrl.createAtManager()

const bundleInfo =
  bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
const tokenID = bundleInfo.appInfo.accessTokenId
//过滤已经授权的权限
const permissions: Array<Permissions> = []
for (let permission of permissionList) {
  if (manager.checkAccessTokenSync(tokenID, permission) ==
  abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
    permissions.push(permission)
  }
}

if (permissions.length <= 0) {
  return true
}

//向用户申请权限
const permissionRequestResult =
  await manager.requestPermissionsFromUser(getContext(), permissions)
LogCat.error("permissionRequestResult>>>" + JSON.stringify(permissionRequestResult))

//过滤用户拒绝的权限
const userDeniedPermissions: Array<Permissions> = []
for (let index = 0; index < permissionRequestResult.authResults.length; index++) {
  if (permissionRequestResult.authResults[index] == abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
    userDeniedPermissions.push(permissionList[index])
  }
}
LogCat.error("userDeniedPermissions>>>" + JSON.stringify(userDeniedPermissions))
let isAllGranted: boolean = userDeniedPermissions.length == 0
if (!isAllGranted && isToSettingsPage) {
  PermissionUtils.toSettingsPage(bundleInfo.name, userDeniedPermissions)
  return isAllGranted
}
return isAllGranted
  }

  public static toSettingsPage(bundleName: string, permissionList: Array<Permissions>) {
(getContext() as common.UIAbilityContext).startAbility({
  bundleName: "com.huawei.hmos.settings",
  abilityName: "com.huawei.hmos.settings.MainAbility",
  uri: "application_info_entry",
  parameters: { pushParams: bundleName, permissionList: permissionList }
})
  }
}
上一篇 下一篇

猜你喜欢

热点阅读