HarmonyOS鸿蒙Next中基于弹窗授权的方式获取媒体库的目标uri报错401,文档说接口不需要权限?
HarmonyOS鸿蒙Next中基于弹窗授权的方式获取媒体库的目标uri报错401,文档说接口不需要权限?
// let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(this.getUIContext().getHostContext() as common.UIAbilityContext);
// 确保通过getContext获取正确的上下文
const context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
try {
// 指定待保存到媒体库的位于应用沙箱的图片uri。
const path = await getFileUrlCache(this.url,this.uuid);
let srcFileUri = fileUri.getUriFromPath(path);
let srcFileUris: Array<string> = [
srcFileUri
];
// 指定待保存照片的创建选项,包括文件后缀和照片类型,标题和照片子类型可选。
let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [
{
fileNameExtension: 'jpg',
photoType: photoAccessHelper.PhotoType.IMAGE,
subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选。
}
];
// 基于弹窗授权的方式获取媒体库的目标uri。
let desFileUris: Array<string> = await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);
// 将来源于应用沙箱的照片内容写入媒体库的目标uri。
let desFile: fileIo.File = await fileIo.open(desFileUris[0], fileIo.OpenMode.WRITE_ONLY);
let srcFile: fileIo.File = await fileIo.open(srcFileUri, fileIo.OpenMode.READ_ONLY);
await fileIo.copyFile(srcFile.fd, desFile.fd);
fileIo.closeSync(srcFile);
fileIo.closeSync(desFile);
console.info('create asset by dialog successfully');
} catch (err) {
console.error(`failed to create asset by dialog successfully errCode is: ${err.code}, ${err.message}`);
}
更多关于HarmonyOS鸿蒙Next中基于弹窗授权的方式获取媒体库的目标uri报错401,文档说接口不需要权限?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
更多关于HarmonyOS鸿蒙Next中基于弹窗授权的方式获取媒体库的目标uri报错401,文档说接口不需要权限?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,获取媒体库目标uri报错401可能涉及以下原因:
- 虽然文档说明接口不需要权限,但实际调用可能仍需声明
ohos.permission.READ_MEDIA
权限 - 弹窗授权流程未正确触发或用户拒绝了授权请求
- 应用配置中缺少必要的
abilities
或permissions
声明 - API版本不兼容,Next版本可能有权限校验变更
检查要点:
- 确认
manifest.json
已声明所需权限 - 验证弹窗授权回调是否正常处理
- 检查使用的API是否与设备鸿蒙版本匹配
从代码和报错来看,401错误通常表示权限问题。虽然文档提到showAssetsCreationDialog
接口不需要权限,但实际上可能仍需要检查以下方面:
- 确保在
module.json5
中声明了必要的权限:
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA",
"reason": "需要读取媒体文件"
},
{
"name": "ohos.permission.WRITE_MEDIA",
"reason": "需要写入媒体文件"
}
]
- 检查上下文获取是否正确,建议使用
UIAbilityContext
:
const context = getContext(this) as common.UIAbilityContext;
-
确保目标路径可访问,特别是当使用
fileUri.getUriFromPath()
时,确认path
是有效的沙箱路径。 -
虽然
showAssetsCreationDialog
会触发系统弹窗授权,但某些情况下仍需要预先获取基本权限。
建议先添加权限声明并检查上下文获取方式,这通常能解决401错误。