HarmonyOS 鸿蒙Next获取到相册照片的uri在image中无法展示
HarmonyOS 鸿蒙Next获取到相册照片的uri在image中无法展示 我已经获取到了照片的uri,但是在image中不能展示,我申请不到受限权限。
aboutToAppear() {
this.getLatestPhoto();
}
async getLatestPhoto() {
const context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
predicates.orderByDesc(photoAccessHelper.PhotoKeys.DATE_MODIFIED_MS);
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: ['uri'],
predicates: predicates
};
try {
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
await phAccessHelper.getAssets(fetchOptions);
let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
if (photoAsset) {
console.info('Latest photo URI: ' + photoAsset.uri);
this.latestPhotoUri = photoAsset.uri;
} else {
console.info('No photos found');
}
fetchResult.close();
} catch (err) {
console.error('Failed to get latest photo:', err);
}
}
if (this.latestPhotoUri) {
Image(this.latestPhotoUri)
.width('100%')
.height('100%')
.objectFit(ImageFit.Cover)
.borderRadius(20)
.rotate({
x: 0,
y: 1,
z: 0,
angle: this.rotationAngle
})
.onError((err) => {
console.error('Image load failed:', err.message)
})
.onComplete(() => {
console.info('Image load complete')
})
}
更多关于HarmonyOS 鸿蒙Next获取到相册照片的uri在image中无法展示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
首先确定一点,
这种权限三方应用一般申请不到,只限于系统应用
看你的回答,图片是能正常读取到的,我这边复制代码之后,无法读取相关权限
Failed to get latest photo: Error: without medialibrary permission
能读取到的话 你可以在这个地方改造一下
```javascript
if (photoAsset) {
console.info('Latest photo URI: ' + photoAsset.uri);
this.latestPhotoUri = fileUri.getUriFromPath(photoAsset.uri);
}
更多关于HarmonyOS 鸿蒙Next获取到相册照片的uri在image中无法展示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
大佬,你把ohos.permission.READ_MEDIA这个权限加上,试试呢。
我使用了你提供的转换代码,还是未能显示。
我这边这种权限加了也没有效果,
大概率是权限问题,这些接口就算给了这些权限,相关的属性可以拿到,但是根本找不到对应的路径地址,使用fileIo.openSync(this.latestPhotoUri, fileIo.OpenMode.READ_ONLY)
,不允许操作,正常来说是可以读取,然后获取文件大小。建议提工单咨询一下,
Latest photo URI: file://media/Photo/15/IMG_1739503986_014/image.jpg
我如果没看错的话, 这个应该就是你获取到的 url 地址, 但是 Image() 是无法识别这个地址的, 你应该把它读取出来, 给到 PixelMap
Image(src: PixelMap | ResourceStr | DrawableDescriptor)
参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-image-V5
首先确认是否真的获取到了 url? 能不能打印出来? 是什么格式? 如果是网络图片, url 在浏览器中是否可以得到响应图片, 如果能得到响应图片, 就证明你的项目没有开通网络权限
真的是获取到了,相册的照片的uri,照片在手机上也是存在的。
打印的日志如下:
02-14 14:14:02.715 10893-10893 A03d00/JSAPP com.examp...otograph I photoAccessHelper getPhotoAccessHelper inner add createDeleteRequest and showAssetsCreationDialog
02-14 14:14:02.753 10893-10893 A03d00/JSAPP com.examp...otograph I Latest photo URI: file://media/Photo/15/IMG_1739503986_014/image.jpg
02-14 14:14:02.804 10893-10893 A03d00/JSAPP com.examp...otograph E Image load failed: file://media/Photo/15/IMG_1739503986_014/image.jpg,
在HarmonyOS(鸿蒙)Next中,获取到相册照片的URI后无法在Image组件中展示,可能是因为URI的格式或权限问题。首先,确保你已正确申请了相册访问权限,并在代码中明确声明了这些权限。其次,检查URI的格式是否正确,通常相册照片的URI应该是content://格式的,而不是file://格式的。
如果你使用的是PhotoViewPicker
或ImagePicker
等组件获取照片URI,确保你正确地处理了返回的URI。在鸿蒙系统中,直接使用Image
组件的src
属性设置URI时,可能需要使用Image
组件的setPixelMap
方法,并传入URI的路径。
示例代码如下:
import picker from '@ohos.file.picker';
import image from '@ohos.multimedia.image';
let photoSelectOptions = new picker.PhotoSelectOptions();
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
photoSelectOptions.maxSelectNumber = 1;
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(photoSelectOptions).then((PhotoSelectResult) => {
let uri = PhotoSelectResult.photoUris[0];
image.createPixelMap(uri).then((pixelMap) => {
this.imageComponent.setPixelMap(pixelMap);
});
}).catch((err) => {
console.error('PhotoPicker failed: ' + err);
});
确保在config.json
中声明了相应的权限:
"reqPermissions": [
{
"name": "ohos.permission.READ_MEDIA"
}
]
如果仍然无法展示,检查URI是否有效,或尝试使用其他方式加载图片。