PermissionUtil.ets 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { fileShare, fileIo as fs, fileUri } from '@kit.CoreFileKit';
  2. import { FileUtil } from '@pura/harmony-utils';
  3. //权限类
  4. class PermissionUtil {
  5. //激活权限
  6. async activatePermission(uri: string | undefined): Promise<boolean> {
  7. if (!uri) {
  8. return false
  9. }
  10. try {
  11. let fd = fs.openSync(uri);
  12. fs.closeSync(fd);
  13. console.log("onecold activatePermission 无需激活权限");
  14. return true
  15. } catch {
  16. try {
  17. if (canIUse('SystemCapability.FileManagement.AppFileService.FolderAuthorization')) {
  18. uri = FileUtil.getUriFromPath(uri)
  19. console.log('onecold 激活权限 activatePermission uri = '+uri);
  20. let policyInfo: fileShare.PolicyInfo = {
  21. uri: uri,
  22. operationMode: fileShare.OperationMode.READ_MODE | fileShare.OperationMode.WRITE_MODE,
  23. };
  24. let policies: Array<fileShare.PolicyInfo> = [policyInfo];
  25. let results = await fileShare.checkPersistentPermission(policies);
  26. for (let i = 0; i < results.length; i++) {
  27. if (results[i]) {
  28. let info: fileShare.PolicyInfo = {
  29. uri: policies[i].uri,
  30. operationMode: policies[i].operationMode,
  31. };
  32. let policy: Array<fileShare.PolicyInfo> = [info];
  33. await fileShare.activatePermission(policy);
  34. console.log('onecold activatePermission 激活权限成功');
  35. }
  36. }
  37. let fd = fs.openSync(uri);
  38. fs.closeSync(fd);
  39. }
  40. return true
  41. } catch (error) {
  42. console.error('onecold activatePermission error = '+JSON.stringify(error));
  43. if (error.code == 13900001 ) {
  44. await this.persistPermission(uri)
  45. }
  46. return false
  47. }
  48. }
  49. }
  50. //持久化权限
  51. async persistPermission(uri: string): Promise<boolean> {
  52. try {
  53. if (canIUse('SystemCapability.FileManagement.AppFileService.FolderAuthorization')) {
  54. let policyInfo: fileShare.PolicyInfo = {
  55. uri: uri,
  56. operationMode: fileShare.OperationMode.READ_MODE | fileShare.OperationMode.WRITE_MODE,
  57. };
  58. let policies: Array<fileShare.PolicyInfo> = [policyInfo];
  59. fileShare.persistPermission(policies).then(() => {
  60. })
  61. let fd = await fs.open(uri);
  62. await fs.close(fd);
  63. }
  64. } catch (error) {
  65. return true
  66. }
  67. return false
  68. }
  69. }
  70. export default new PermissionUtil();