harmony 鸿蒙@ohos.application.uriPermissionManager(URI权限管理)(系统接口)

  • 2025-06-12
  • 浏览 (3)

@ohos.application.uriPermissionManager(URI权限管理)(系统接口)

URI权限管理模块。用于应用A授权/撤销授权URI给应用B。

说明:

本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
本模块接口均为系统接口,三方应用不支持调用。

导入模块

import { uriPermissionManager } from '@kit.AbilityKit';

uriPermissionManager.grantUriPermission

grantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string, callback: AsyncCallback<number>): void

授权URI给指定应用,授权成功后目标应用将获得该URI的文件访问权限,目标应用退出后权限将被回收。目标应用使用该URI的方法可以参考应用文件分享。使用callback异步回调。

说明:

当应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限时, 可以授权不属于自身但具有访问权限的URI。如果不具备该权限,则仅支持授权属于自身的URI。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

需要权限:ohos.permission.PROXY_AUTHORIZATION_URI

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
flag wantConstant.Flags URI的读权限或写权限。
targetBundleName string 被授权URI的应用包名。
callback AsyncCallback<number> 回调函数。返回0表示有权限,返回-1表示无权限。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
201 Permission denied.
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000058 Invalid URI flag.
16000059 Invalid URI type.
16000060 A sandbox application cannot grant URI permission.

示例:

  import { uriPermissionManager, wantConstant } from '@kit.AbilityKit';
  import { fileIo, fileUri } from '@kit.CoreFileKit';

  let targetBundleName = 'com.example.test_case1'
  let path = 'file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir';
  fileIo.mkdir(path, (err) => {
    if (err) {
      console.error(`mkdir failed, err code: ${err.code}, err msg: ${err.message}.`);
    } else {
      console.info(`mkdir success.`);
    }
  });
  let uri = fileUri.getUriFromPath(path);
  uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName,
    (error) => {
      if (error && error.code !== 0) {
        console.error(`grantUriPermission failed, err code: ${error.code}, err msg: ${error.message}.`);
        return;
      }
      console.info(`grantUriPermission success.`);
    });

uriPermissionManager.grantUriPermission

grantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string): Promise<number>

授权URI给指定应用,授权成功后目标应用将获得该URI的文件访问权限,目标应用退出后权限将被回收。目标应用使用该URI的方法可以参考应用文件分享。使用Promise异步回调。

说明:

当应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限时, 可以授权不属于自身但具有访问权限的URI。如果不具备该权限,则仅支持授权属于自身的URI。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

需要权限:ohos.permission.PROXY_AUTHORIZATION_URI

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
flag wantConstant.Flags URI的读权限或写权限。
targetBundleName string 被授权URI的应用包名。

返回值:

类型 说明
Promise<number> Promise对象。返回0表示有权限,返回-1表示无权限。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
201 Permission denied.
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000058 Invalid URI flag.
16000059 Invalid URI type.
16000060 A sandbox application cannot grant URI permission.

示例:

  import { uriPermissionManager, wantConstant } from '@kit.AbilityKit';
  import { fileIo, fileUri } from '@kit.CoreFileKit';
  import { BusinessError } from '@kit.BasicServicesKit';

  let targetBundleName = 'com.example.test_case1'
  let path = 'file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir';

  fileIo.mkdir(path, (err) => {
    if (err) {
      console.error(`mkdir failed, err code: ${err.code}, err msg: ${err.message}.`);
    } else {
      console.info(`mkdir succeed.`);
    }
  });
  let uri = fileUri.getUriFromPath(path);
  uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName)
    .then((data) => {
      console.info(`Verification succeeded, data: ${JSON.stringify(data)}.`);
    }).catch((err: BusinessError) => {
    console.error(`Verification failed, err code: ${err.code}, err msg: ${err.message}.`);
  });

uriPermissionManager.grantUriPermission14+

grantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string, appCloneIndex: number): Promise<void>

授权URI给指定应用,授权成功后目标应用将获得该URI的文件访问权限,目标应用退出后权限将被回收。目标应用使用该URI的方法可以参考应用文件分享。使用Promise异步回调。

说明:

  • 当应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限时, 可以授权不属于自身但具有访问权限的URI。如果不具备该权限,则仅支持授权属于自身的URI。
  • 该接口支持给分身应用授权,需要指定目标应用的应用包名和分身索引。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

需要权限:ohos.permission.PROXY_AUTHORIZATION_URI

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
flag wantConstant.Flags URI的读权限或写权限。
targetBundleName string 被授权应用的应用包名。
appCloneIndex number 被授权应用的分身索引,有效范围为[0, 1000], 取值为0时表示主应用。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
201 Permission denied.
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000058 Invalid URI flag.
16000059 Invalid URI type.
16000060 A sandbox application cannot grant URI permission.
16000081 Failed to obtain the target application information.

示例:

  import { AbilityConstant, UIAbility, Want, wantConstant, uriPermissionManager } from '@kit.AbilityKit';
  import { fileUri } from '@kit.CoreFileKit';
  import { BusinessError } from '@kit.BasicServicesKit';

  export default class EntryAbility extends UIAbility {
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    }

    onForeground(): void {
      let targetBundleName: string = 'com.example.demo1';
      let filePath: string = this.context.filesDir + "/test.txt";
      let uri: string = fileUri.getUriFromPath(filePath);
      // grant uri permission to main application
      try {
        let appCloneIndex: number = 0;
        uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName,
          appCloneIndex)
          .then(() => {
            console.info('grantUriPermission succeeded.');
          }).catch((error: BusinessError) => {
          console.error(`grantUriPermission failed. error: ${JSON.stringify(error)}.`);
        });
      } catch (error) {
        console.error(`grantUriPermission failed. error: ${JSON.stringify(error)}.`);
      }

      // grant uri permission to clone application
      try {
        let appCloneIndex: number = 1;
        uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName,
          appCloneIndex)
          .then(() => {
            console.info('grantUriPermission succeeded.');
          }).catch((error: BusinessError) => {
          console.error(`grantUriPermission failed. error: ${JSON.stringify(error)}.`);
        });
      } catch (error) {
        console.error(`grantUriPermission failed. error: ${JSON.stringify(error)}.`);
      }
    }
  }

uriPermissionManager.revokeUriPermission

revokeUriPermission(uri: string, targetBundleName: string, callback: AsyncCallback<number>): void

撤销授权指定应用的URI。使用callback异步回调。

说明:

允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
targetBundleName string 被撤销授权uri的应用包名。
callback AsyncCallback<number> 回调函数。返回0表示有权限,返回-1表示无权限。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000059 Invalid URI type.

示例:

  import { uriPermissionManager } from '@kit.AbilityKit';

  let targetBundleName = 'com.example.test_case2';
  let uri = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir";

  uriPermissionManager.revokeUriPermission(uri, targetBundleName, (error) => {
    if (error && error.code !== 0) {
      console.error("revokeUriPermission failed, error.code = " + error.code);
      return;
    }
    console.info("revokeUriPermission success");
  });

uriPermissionManager.revokeUriPermission

revokeUriPermission(uri: string, targetBundleName: string): Promise<number>

撤销授权指定应用的URI。使用Promise异步回调。

说明:

允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
targetBundleName string 被授权URI的应用包名。

返回值:

类型 说明
Promise<number> Promise对象。返回0表示有权限,返回-1表示无权限。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000059 Invalid URI type.

示例:

  import { uriPermissionManager } from '@kit.AbilityKit';
  import { BusinessError } from '@kit.BasicServicesKit';

  let targetBundleName = 'com.example.test_case2';
  let uri = 'file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir';

  uriPermissionManager.revokeUriPermission(uri, targetBundleName)
    .then((data) => {
      console.info(`Verification success, data: ${JSON.stringify(data)}.`);
    }).catch((error: BusinessError) => {
    console.error(`Verification failed, err code: ${error.code}, err msg: ${error.message}.`);
  });

uriPermissionManager.revokeUriPermission14+

revokeUriPermission(uri: string, targetBundleName: string, appCloneIndex: number): Promise<void>

撤销授权指定应用的URI。使用Promise异步回调。

说明:

  • 允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。
  • 该接口支持撤销授权给分身应用的URI权限,需要指定目标应用的应用包名和分身索引。

系统接口:此接口为系统接口。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

参数名 类型 必填 说明
uri string 指向文件的URI,scheme固定为”file”,参考FileUri
targetBundleName string 被授权应用的应用包名。
appCloneIndex number 被授权应用的分身索引,有效范围为[0, 1000], 取值为0时表示主应用。

返回值:

类型 说明
Promise<void> Promise对象。无返回结果的Promise对象。

错误码:

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
202 Not System App. Interface caller is not a system app.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.
801 Capability not supported.
16000050 Internal error.
16000059 Invalid URI type.
16000081 Failed to obtain the target application information.

示例:


  import { AbilityConstant, UIAbility, Want, wantConstant, uriPermissionManager } from '@kit.AbilityKit';
  import { fileUri } from '@kit.CoreFileKit';
  import { BusinessError } from '@kit.BasicServicesKit';

  export default class EntryAbility extends UIAbility {
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    }

    onForeground(): void {
      let targetBundleName: string = 'com.example.demo1';
      let filePath: string = this.context.filesDir + "/test.txt";
      let uri: string = fileUri.getUriFromPath(filePath);
      // revoke uri permission of main application
      try {
        let appCloneIndex: number = 0;
        uriPermissionManager.revokeUriPermission(uri, targetBundleName, appCloneIndex)
          .then(() => {
            console.info('revokeUriPermission succeeded.');
          }).catch((error: BusinessError) => {
          console.error(`revokeUriPermission failed. error: ${JSON.stringify(error)}.`);
        });
      } catch (error) {
        console.error(`revokeUriPermission failed. error: ${JSON.stringify(error)}.`);
      }

      // revoke uri permission of clone application
      try {
        let appCloneIndex: number = 0;
        uriPermissionManager.revokeUriPermission(uri, targetBundleName, appCloneIndex)
          .then(() => {
            console.info('revokeUriPermission succeeded.');
          }).catch((error: BusinessError) => {
          console.error(`revokeUriPermission failed. error: ${JSON.stringify(error)}.`);
        });
      } catch (error) {
        console.error(`revokeUriPermission failed. error: ${JSON.stringify(error)}.`);
      }
    }
  }

你可能感兴趣的鸿蒙文章

harmony 鸿蒙Ability Kit(程序框架服务)

harmony 鸿蒙AbilityBase

harmony 鸿蒙AbilityBase_Element

harmony 鸿蒙AbilityRuntime

harmony 鸿蒙bundle

harmony 鸿蒙OH_NativeBundle_ApplicationInfo

harmony 鸿蒙OH_NativeBundle_ElementName

harmony 鸿蒙ability_base_common.h

harmony 鸿蒙ability_runtime_common.h

harmony 鸿蒙application_context.h

0  赞