鸿蒙0基础学习【授权持久化(C/C++)】文件基础服务
场景介绍
支持设备PC/2in1
应用通过Picker获取临时授权,临时授权在应用退出后或者设备重启后会清除。如果应用重启或者设备重启后需要直接访问之前已访问过的文件,则对文件进行[持久化授权]。FileShare提供了支持基于uri的文件及目录授于持久化权限、权限激活、权限查询等方法。
接口说明
支持设备PC/2in1
约束与限制
支持设备PC/2in1
- 使用文件分享的相关接口,需确认设备具有以下系统能力:SystemCapability.FileManagement.AppFileService.FolderAuthorization。
- 在调用文件分享的相关接口前,需要申请权限:“ohos.permission.FILE_ACCESS_PERSIST”
开发步骤
支持设备PC/2in1
以下步骤描述了如何使用FileShare提供的Native API接口。
添加动态链接库
CMakeLists.txt中添加以下lib。
target_link_libraries(sample PUBLIC libohfileshare.so)
头文件
#include #include
- 创建FileShare_PolicyInfo实例,调用OH_FileShare_PersistPermission接口,设置uri的持久化授权,接口入参policyNum最大上限为500。
static const uint32_t POLICY_NUM = 2;char strTestPath1[] = \"file://com.example.fileshare/data/storage/el2/base/files/test1.txt\";char strTestPath2[] = \"file://com.example.fileshare/data/storage/el2/base/files/test2.txt\";FileShare_PolicyInfo policy[POLICY_NUM] = { {strTestPath1, static_cast(strlen(strTestPath1)), FileShare_OperationMode::READ_MODE}, {strTestPath2, static_cast(strlen(strTestPath2)), FileShare_OperationMode::WRITE_MODE}};FileShare_PolicyErrorResult* result = nullptr;uint32_t resultNum = 0;auto ret = OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);if (ret != ERR_OK) { if (ret == ERR_EPERM && result != nullptr) { for(uint32_t i = 0; i < resultNum; i++) { std::cout << \"error uri: \" << result[i].uri << std::endl; std::cout << \"error code: \" << result[i].code << std::endl; std::cout << \"error message: \" << result[i].message << std::endl; } }}OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
- 调用OH_FileShare_ActivatePermission接口,激活启用已授权过的uri,接口入参policyNum最大上限为500。
auto ret = OH_FileShare_ActivatePermission(policy, POLICY_NUM, &result, &resultNum);if (ret != ERR_OK) { if (ret == ERR_EPERM && result != nullptr) { for(uint32_t i = 0; i < resultNum; i++) { std::cout << \"error uri: \" << result[i].uri << std::endl; std::cout << \"error code: \" << result[i].code << std::endl; std::cout << \"error message: \" << result[i].message << std::endl; } }}OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
- 调用OH_FileShare_DeactivatePermission接口,停止已启用授权过uri的访问权限,接口入参policyNum最大上限为500。
auto ret = OH_FileShare_DeactivatePermission(policy, POLICY_NUM, &result, &resultNum);if (ret != ERR_OK) { if (ret == ERR_EPERM && result != nullptr) { for(uint32_t i = 0; i < resultNum; i++) { std::cout << \"error uri: \" << result[i].uri << std::endl; std::cout << \"error code: \" << result[i].code << std::endl; std::cout << \"error message: \" << result[i].message << std::endl; } }}OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
- 调用OH_FileShare_RevokePermission接口,撤销已经授权的uri持久化权限,接口入参policyNum最大上限为500。
auto ret = OH_FileShare_RevokePermission(policy, POLICY_NUM, &result, &resultNum);if (ret != ERR_OK) { if (ret == ERR_EPERM && result != nullptr) { for(uint32_t i = 0; i < resultNum; i++) { std::cout << \"error uri: \" << result[i].uri << std::endl; std::cout << \"error code: \" << result[i].code << std::endl; std::cout << \"error message: \" << result[i].message << std::endl; } }}OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
- 调用OH_FileShare_CheckPersistentPermission接口,检查uri持久化权限,接口入参policyNum最大上限为500。
bool *result = nullptr;auto ret = OH_FileShare_CheckPersistentPermission(policy, POLICY_NUM, &result, &resultNum);if (result != nullptr && resultNum > 0) { for(uint32_t i = 0; i < resultNum && resultNum <= POLICY_NUM; i++) { std::cout << \"uri: \" << policy[i].uri << std::endl; std::cout << \"result: \" << result[i] << std::endl; }}std::cout << \"retCode: \" << ret << std::endl;free(result);
更多内容:
在↓