PermissionControl.ets 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { abilityAccessCtrl, bundleManager, PermissionRequestResult, Permissions } from '@kit.AbilityKit';
  2. export class PermissionControl {
  3. private declare static instance: PermissionControl
  4. private tokenID: number = 0
  5. //记录已申请权限,方便到时候调用checkPermission时传参
  6. private permissions: Permissions[] = []
  7. //上一次使用checkPermission校验的权限
  8. private lastPermission?: Permissions
  9. private context?: Context
  10. private atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  11. private constructor() {
  12. }
  13. static getInstance() {
  14. if (!PermissionControl.instance) {
  15. PermissionControl.instance = new PermissionControl()
  16. }
  17. return PermissionControl.instance
  18. }
  19. //TODO 需要在windowStage中初始化
  20. async init(context: Context) {
  21. this.context = context
  22. const res = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
  23. this.tokenID = res.appInfo.accessTokenId
  24. }
  25. //申请权限
  26. askPermission(permissions: Permissions[], callback: (res?: PermissionRequestResult, err?: Error) => void) {
  27. this.permissions = permissions
  28. this.atManager.requestPermissionsFromUser(this.context, permissions, (err, data) => {
  29. if (!err && data) {
  30. callback(data)
  31. } else {
  32. callback(undefined, err)
  33. }
  34. })
  35. }
  36. //二次申请权限 不传参数就是上次校验的权限
  37. secondAskPermission(permission: Permissions | undefined = this.lastPermission) {
  38. if (permission) {
  39. this.atManager.requestPermissionOnSetting(this.context, this.permissions)
  40. }
  41. }
  42. //校验权限
  43. checkPermission(permission: Permissions) {
  44. const isPermission = this.atManager.checkAccessTokenSync(this.tokenID, permission)
  45. this.lastPermission = permission
  46. if (isPermission == -1) {
  47. return false
  48. }
  49. return true
  50. }
  51. }
  52. export const permissionController = PermissionControl.getInstance()