相册备份功能,如何获取图库所有图片视频信息?(HarmonyOS 鸿蒙Next)

相册备份功能,如何获取图库所有图片视频信息?(HarmonyOS 鸿蒙Next) 相册备份功能,如何获取图库所有图片视频信息?

2 回复

开发者您好,NEXT版本中系统图库中的【图片】相册不是一个物理意思上的相册文件,它是系统图库中图片的合集。

系统相册资源包括:收藏夹、视频相册、截屏和录屏相册;其中截屏和录屏相册仅向系统应用开放。

可参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/medialibrary/photoAccessHelper-systemAlbum-guidelines.md#系统相册资源使用指导

这个截屏和录屏指的是相册,截屏和录屏相册对象仅系统应用可以获取。

系统截屏生成的图片是可以在图片相册中获取到,可以使用phAccessHelper.getAssets获取到;系统录屏生成的视频文件可以在视频相册中获取。

您可参考以下demo获取相册中的图片信息:

function getPhoto(context:Context){

 let atManager = abilityAccessCtrl.createAtManager();

 const permissions: Array<Permissions> = ['ohos.permission.READ_MEDIA',"ohos.permission.WRITE_MEDIA"];

 atManager.requestPermissionsFromUser(context, permissions).then(async (data) => { //需要用户允许授权图库权限

 let grantStatus: Array<number> = data.authResults;

 let length: number = grantStatus.length;

 for (let i = 0; i < length; i++) {

 if (grantStatus[i] === 0) { //用户同意权限之后进行的操作

 let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); //context为getContext获取

 console.info('albumGetAssetsDemoPromise');

 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); //筛选条件

 let predicates1: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); //筛选条件

 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;

 let title: photoAccessHelper.PhotoKeys = photoAccessHelper.PhotoKeys.TITLE;

 // predicates.equalTo(albumName, 'test2');

 let albumFetchOptions: photoAccessHelper.FetchOptions = {
 fetchColumns: [],
 predicates: predicates
 };

 let fetchOption: photoAccessHelper.FetchOptions = {
 fetchColumns: ['title'],
 predicates: predicates1
 };

 const albumList: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.
 getAlbums(photoAccessHelper.AlbumType.USER , photoAccessHelper.AlbumSubtype.ANY, albumFetchOptions); //获取满足条件的相册列表,如果没加筛选条件就是所有相册



 while(await albumList.isAfterLast()!=null){
 console.info('photoAsset displayName: 数量',albumList.getCount());

 let album: photoAccessHelper.Album = await albumList.getNextObject(); //获取下一个

 console.info('photoAsset displayName: ', album.albumName); //名字

 console.info('photoAsset displayName: ', album.albumSubtype); //名字

 console.info('photoAsset displayName:------------------------------------------------------- ')

 album.getAssets(fetchOption).then(async (albumFetchResult) => {
 while (!albumFetchResult.isAfterLast()) { //循环打印相册中的图片

 let photoAsset: photoAccessHelper.PhotoAsset = await albumFetchResult.getNextObject();

 let photoTitle = photoAsset.get(title);

 console.info(`xxxwidth is ${JSON.stringify(photoTitle)}`);

 // console.info('photoAsset displayName: ', photoAsset.uri); //图片视频资源uri

 // if (photoAsset === undefined) {
 // console.error('asset not exist');
 // return;
 // }
 // phAccessHelper.createDeleteRequest([photoAsset.uri]);
 // console.info('createDeleteRequest successfully');
 }
 console.info('photoAsset displayName:------------------------------------------------------- ')
 }).catch((err: BusinessError) => {
 console.error('album getPhotoAssets failed with error: ' + err);
 });
 }
 }
 else {
 // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
 return;
 }
 }
 // 授权成功
 }).catch((err:BusinessError) => {
 console.error(`requestPermissionsFromUser failed, code is ${err.code}, message is ${err.message}`);
 })
}

更多关于相册备份功能,如何获取图库所有图片视频信息?(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙Next)中,获取图库中所有图片和视频信息可以通过PhotoAccessHelper模块实现。首先,使用PhotoAccessHelperopenPhotoPicker方法打开图库选择器,获取用户选择的媒体文件。然后,通过PhotoAccessHelpergetAssets方法获取所有媒体文件的元数据,包括文件名、路径、创建时间等。具体步骤如下:

  1. 引入PhotoAccessHelper模块:
import photoAccessHelper from '@ohos.file.photoAccessHelper';
  1. 打开图库选择器并获取用户选择的媒体文件:
let photoPicker = new photoAccessHelper.PhotoViewPicker();
photoPicker.select().then((photoSelectResult) => {
    // 处理用户选择的媒体文件
});
  1. 获取所有媒体文件的元数据:
let photoAccessHelper = photoAccessHelper.getPhotoAccessHelper();
photoAccessHelper.getAssets().then((assets) => {
    // 处理获取到的媒体文件元数据
});

通过以上步骤,可以获取图库中所有图片和视频的信息。

回到顶部