HarmonyOS 鸿蒙Next 从相册选择图片后通过预览打开失败
HarmonyOS 鸿蒙Next 从相册选择图片后通过预览打开失败
uri:file://com.example.myapplication/data/storage/el2/base/haps/entry/files/xxx.jpg
demo参考:
import { filePreview } from '@kit.PreviewKit';
import { promptAction } from '@kit.ArkUI';
import fs from '@ohos.file.fs';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import fileUri from '@ohos.file.fileuri';
let fileName: string = 'tt.jpg';
let context = getContext(this);
let fileDir = context.filesDir; // 获取沙箱路径
let uri = ''; // 获取uri
let pathDir = getContext().filesDir;
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
Button('1、相册图片写入沙箱')
.onClick(() => {
this.picture()
})
Button('2、预览')
.onClick(async () => {
let result = await filePreview.canPreview(context, uri); // 传入uri,判断是否可预览
console.log('result:' + result)
if (result) {
let previewInfo: filePreview.PreviewInfo = {
title: fileName,
uri: uri,
mimeType: 'image/jpeg'
}
filePreview.openPreview(getContext(this), previewInfo)
.then(() => {
console.log('预览成功')
}); // 打开预览
} else {
promptAction.showToast({
// 不可预览
message: '文件不可预览'
});
}
})
}
.width('100%')
}
.height('100%')
}
async picture() {
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1;
let photoPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {
let photouri: Array<string> = PhotoSelectResult.photoUris
console.log('photouri[0]:' + photouri[0])
let file = fs.openSync(photouri[0], fs.OpenMode.READ_ONLY)
//图片保存到沙箱
uri = fileUri.getUriFromPath(pathDir + '/picture2.jpg')
console.log('uri:'+uri)
let file2 = fs.openSync(pathDir + '/picture2.jpg', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
fs.copyFileSync(file.fd, file2.fd)
fs.closeSync(file);
fs.closeSync(file2);
})
}
}
更多关于HarmonyOS 鸿蒙Next 从相册选择图片后通过预览打开失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好。
通过PhotoPicker,安全相册控件,从媒体资源库选择图片,点击完成后,会得到图片的Uri。
通过uri可以临时授权访问用户的相册图片。但是当app切入后台再返回前台就会丢失Uri的访问权限。
这里需要注意。如果是自己做的预览图片,会有这个问题。picker选择图片后的默认预览,不存在该问题。
针对HarmonyOS 鸿蒙Next系统中从相册选择图片后通过预览打开失败的问题,这通常与权限管理、图片路径处理或UI组件的绑定有关。以下是一些可能的解决方案概述,不涉及Java或C语言:
-
权限检查:确保应用已正确申请并获取了访问相册和存储的权限。在鸿蒙系统中,权限管理更为严格,未授权可能导致无法读取图片。
-
图片路径处理:检查从相册获取的图片路径是否正确,以及路径格式是否适用于鸿蒙系统的文件访问API。有时路径错误或格式不兼容会导致预览失败。
-
UI组件绑定:确认图片预览组件已正确绑定到图片数据源。在鸿蒙的UI框架中,数据绑定错误或未及时更新可能导致组件无法显示内容。
-
异常捕获:增加异常捕获逻辑,查看是否有具体的错误信息或异常抛出,这有助于定位问题。
-
系统兼容性:考虑是否是由于鸿蒙系统版本更新导致的兼容性问题,尝试在不同版本的鸿蒙系统上测试。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html