1# @ohos.application.uriPermissionManager(URI权限管理)(系统接口) 2 3URI权限管理模块。用于应用A授权/撤销授权URI给应用B 4 5> **说明:** 6> 7> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 本模块接口均为系统接口,三方应用不支持调用。 9 10 11## 导入模块 12 13 14```ts 15import { uriPermissionManager } from '@kit.AbilityKit'; 16``` 17 18 19## uriPermissionManager.grantUriPermission 20 21grantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string, callback: AsyncCallback<number>): void 22 23授权URI给指定应用。使用callback异步回调。 24 25允许应用授权属于自身的URI, 若应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限, 则还允许授权不属于自身但具有访问权限的URI。 26**系统API**:该接口为系统接口,三方应用不支持调用。 27 28**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 29 30**需要权限:** ohos.permission.PROXY_AUTHORIZATION_URI 31 32**参数:** 33 34 | 参数名 | 类型 | 必填 | 说明 | 35 | -------- | -------- | -------- | -------- | 36 | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 37 | flag | [wantConstant.Flags](js-apis-app-ability-wantConstant.md#flags) | 是 | URI的读权限或写权限。 | 38 | targetBundleName | string | 是 | 被授权URI的应用包名 | 39 | callback | AsyncCallback<number> | 是 | 回调函数。返回0表示有权限,返回-1表示无权限。 | 40 41**错误码:** 42 43 以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 44 45| 错误码ID | 错误信息 | 46| ------- | -------------------------------- | 47| 201 | Permission denied. | 48| 202 | Not System App. Interface caller is not a system app. | 49| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| 50| 16000050 | Internal error. | 51| 16000058 | Invalid URI flag. | 52| 16000059 | Invalid URI type. | 53| 16000060 | A sandbox application cannot grant URI permission. | 54 55 56**示例:** 57 58 ```ts 59 import { uriPermissionManager, wantConstant } from '@kit.AbilityKit'; 60 import { fileIo, fileUri } from '@kit.CoreFileKit'; 61 62 let targetBundleName = 'com.example.test_case1' 63 let path = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir"; 64 fileIo.mkdir(path, (err) => { 65 if (err) { 66 console.log("mkdir error" + err.message); 67 } else { 68 console.log("mkdir succeed"); 69 } 70 }); 71 let uri = fileUri.getUriFromPath(path); 72 uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName, (result) => { 73 console.log("result.code = " + result.code); 74 }); 75 ``` 76 77 78## uriPermissionManager.grantUriPermission 79 80grantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string): Promise<number> 81 82授权URI给指定应用。使用Promise异步回调。 83 84允许应用授权属于自身的URI, 若应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限, 则还允许授权不属于自身但具有访问权限的URI。 85**系统API**:该接口为系统接口,三方应用不支持调用。 86 87**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 88 89**需要权限:** ohos.permission.PROXY_AUTHORIZATION_URI 90 91**参数:** 92 93 | 参数名 | 类型 | 必填 | 说明 | 94 | -------- | -------- | -------- | -------- | 95 | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 96 | flag | [wantConstant.Flags](js-apis-app-ability-wantConstant.md#flags) | 是 | URI的读权限或写权限。 | 97 | targetBundleName | string | 是 | 被授权URI的应用包名 | 98 99**返回值:** 100 101 | 类型 | 说明 | 102 | -------- | -------- | 103 | Promise<number> | Promise对象。返回0表示有权限,返回-1表示无权限。 | 104 105**错误码:** 106 107 以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 108 109 | 错误码ID | 错误信息 | 110 | ------- | -------------------------------- | 111 | 201 | Permission denied. | 112 | 202 | Not System App. Interface caller is not a system app. | 113 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| 114 | 16000050 | Internal error. | 115 | 16000058 | Invalid URI flag. | 116 | 16000059 | Invalid URI type. | 117 | 16000060 | A sandbox application cannot grant URI permission. | 118 119**示例:** 120 121 ```ts 122 import { uriPermissionManager, wantConstant } from '@kit.AbilityKit'; 123 import { fileIo, fileUri } from '@kit.CoreFileKit'; 124 import { BusinessError } from '@kit.BasicServicesKit'; 125 126 let targetBundleName = 'com.example.test_case1' 127 let path = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir"; 128 129 fileIo.mkdir(path, (err) => { 130 if (err) { 131 console.log("mkdir error" + err.message); 132 } else { 133 console.log("mkdir succeed"); 134 } 135 }); 136 let uri = fileUri.getUriFromPath(path); 137 uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName) 138 .then((data) => { 139 console.log('Verification succeeded.' + data); 140 }).catch((error: BusinessError) => { 141 console.log('Verification failed.'); 142 }); 143 ``` 144 145## uriPermissionManager.revokeUriPermission 146 147revokeUriPermission(uri: string, targetBundleName: string, callback: AsyncCallback<number>): void 148 149撤销授权指定应用的URI。使用callback异步回调。 150 151允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。 152**系统API**:该接口为系统接口,三方应用不支持调用。 153 154**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 155 156**参数:** 157 158 | 参数名 | 类型 | 必填 | 说明 | 159 | -------- | -------- | -------- | -------- | 160 | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 161 | targetBundleName | string | 是 | 被撤销授权uri的应用包名 | 162 | callback | AsyncCallback<number> | 是 | 回调函数。返回0表示有权限,返回-1表示无权限。 | 163 164**错误码:** 165 166 以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 167 168 | 错误码ID | 错误信息 | 169 | ------- | -------------------------------- | 170 | 202 | Not System App. Interface caller is not a system app. | 171 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| 172 | 16000050 | Internal error. | 173 | 16000059 | Invalid URI type. | 174 175**示例:** 176 177 ```ts 178 import { uriPermissionManager } from '@kit.AbilityKit'; 179 180 let targetBundleName = 'com.example.test_case2'; 181 let uri = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir"; 182 183 uriPermissionManager.revokeUriPermission(uri, targetBundleName, (result) => { 184 console.log("result.code = " + result.code); 185 }); 186 ``` 187 188 189## uriPermissionManager.revokeUriPermission 190 191revokeUriPermission(uri: string, targetBundleName: string): Promise<number> 192 193撤销授权指定应用的URI。使用Promise异步回调。 194 195 196允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。 197**系统API**:该接口为系统接口,三方应用不支持调用。 198 199**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 200 201**参数:** 202 203 | 参数名 | 类型 | 必填 | 说明 | 204 | -------- | -------- | -------- | -------- | 205 | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 206 | targetBundleName | string | 是 | 被授权URI的应用包名 | 207 208**返回值:** 209 210 | 类型 | 说明 | 211 | -------- | -------- | 212 | Promise<number> | Promise对象。返回0表示有权限,返回-1表示无权限。 | 213 214**错误码:** 215 216 以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 217 218 | 错误码ID | 错误信息 | 219 | ------- | -------------------------------- | 220 | 202 | Not System App. Interface caller is not a system app. | 221 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| 222 | 16000050 | Internal error. | 223 | 16000059 | Invalid URI type. | 224 225 226**示例:** 227 228 ```ts 229 import { uriPermissionManager } from '@kit.AbilityKit'; 230 import { BusinessError } from '@kit.BasicServicesKit'; 231 232 let targetBundleName = 'com.example.test_case2'; 233 let uri = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir"; 234 235 uriPermissionManager.revokeUriPermission(uri, targetBundleName) 236 .then((data) => { 237 console.log('Verification succeeded.' + data); 238 }).catch((error: BusinessError) => { 239 console.log('Verification failed.'); 240 }); 241 ``` 242