HarmonyOS鸿蒙Next中photoAccessHelper如何获取所有相册的信息

HarmonyOS鸿蒙Next中photoAccessHelper如何获取所有相册的信息 在NEXT鸿蒙系统只能拿到photoAccessHelper.AlbumType.USER的相册信息,无法拿到系统自动分类的相册信息,而且数目也不正确。

async aboutToAppear(): Promise<void> {
  const context = getContext(this);
  const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  const predicates = new dataSharePredicates.DataSharePredicates();
  const fetchOptions: photoAccessHelper.FetchOptions = {
    fetchColumns: [],
    predicates
  }
  const sysFetchResult = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.ANY, fetchOptions);
  const userFetchResult = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.ANY, fetchOptions);
  console.info('fetchResult', sysFetchResult.getCount())
  console.info('fetchResult', userFetchResult.getCount())
  const sysAlbum = await this.fetchResultIterator(sysFetchResult);
  const userAlbum = await this.fetchResultIterator(userFetchResult);
  sysAlbum.forEach(album => {
    console.info('sysAlbumName', album.albumName);
  })
  userAlbum.forEach(album => {
    console.info('userAlbumName', album.albumName);
  })
}

async fetchResultIterator(fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album>, albumList: photoAccessHelper.Album[] = []): Promise<photoAccessHelper.Album[]> {
  if (fetchResult.isAfterLast()) return albumList;
  const getPhotoObject = !albumList.length ? fetchResult.getFirstObject() : fetchResult.getNextObject();
  const album = await getPhotoObject;
  albumList.push(album);
  return this.fetchResultIterator(fetchResult, albumList)
}

更多关于HarmonyOS鸿蒙Next中photoAccessHelper如何获取所有相册的信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
  1. phAccessHelper.getAlbums只能获取用户创建的相册和系统预置相册。而系统预置相册,只有两个,根据类型分别是FAVORITE和VIDEO。

  2. NEXT版本中系统图库中的【图片】相册并不是一个物理意思上的相册文件,它是系统图库中图片的合集,所以通过phAccessHelper.getAlbums获取相册对象是无法获取到该合集。 系统相册资源包括:收藏夹、视频相册、截屏和录屏相册;其中截屏和录屏相册仅向系统应用开放。 可参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/medialibrary/photoAccessHelper-systemAlbum-guidelines.md#%E7%B3%BB%E7%BB%9F%E7%9B%B8%E5%86%8C%E8%B5%84%E6%BA%90%E4%BD%BF%E7%94%A8%E6%8C%87%E5%AF%BC

  3. 系统相册资源包括:收藏夹、视频相册、截屏和录屏相册;其中截屏和录屏相册仅向系统应用开放。” 这个截屏和录屏指的是相册,截屏和录屏相册对象仅系统应用可以获取。系统截屏生成的图片是可以在图片相册中获取到,可以使用phAccessHelper.getAssets获取到;系统录屏生成的视频文件可以在视频相册中获取。

更多关于HarmonyOS鸿蒙Next中photoAccessHelper如何获取所有相册的信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用photoAccessHelper获取所有相册信息可以通过以下步骤实现:

  1. 获取PhotoAccessHelper实例: 首先,需要获取PhotoAccessHelper的实例,用于后续操作。

    const photoAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
    
  2. 获取相册列表: 使用PhotoAccessHelpergetAlbums方法获取所有相册的列表。该方法返回一个Promise,解析后可以得到相册的数组。

    photoAccessHelper.getAlbums().then((albums) => {
        // albums是一个包含所有相册信息的数组
    }).catch((error) => {
        console.error("获取相册列表失败: ", error);
    });
    
  3. 遍历相册信息: 获取到相册数组后,可以遍历每个相册对象,获取相册的详细信息,如相册名称、相册ID、相册中的照片数量等。

    albums.forEach((album) => {
        console.log("相册名称: ", album.albumName);
        console.log("相册ID: ", album.albumId);
        console.log("照片数量: ", album.count);
    });
    

在HarmonyOS鸿蒙Next中,使用photoAccessHelper获取所有相册信息,首先需要获取PhotoAccessHelper实例,然后通过getAlbums方法查询相册。示例如下:

import photoAccessHelper from '@ohos.file.photoAccessHelper';

async function getAllAlbums() {
    const photoHelper = photoAccessHelper.getPhotoAccessHelper(context);
    const albums = await photoHelper.getAlbums(photoAccessHelper.AlbumType.USER);
    return albums;
}

此代码会返回用户相册的列表,每个相册包含名称、ID等信息。

回到顶部