如何获取HarmonyOS鸿蒙Next中相机相册

如何获取HarmonyOS鸿蒙Next中相机相册

需要开发一个相册备份app,申请了READ_IMAGEVIDEO,也动态申请了权限,使用phAccessHelper.getAlbums无法正确获取相册数据

使用phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC)获取到的是空的

使用phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.ANY)能获取到3个相册,但是都是空对象,也获取不到相册名等信息


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

11 回复

是否因为调试机, 就是没有 photoAccessHelper.AlbumType.USER 类型的相册?
备份的话, 要是系统所有相册了,

系统相册参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/photoaccesshelper-systemalbum-guidelines

关于取得系统相册但是没有相册名, 是否因为系统相册名字是固定的. 拿到系统相册的类型就相当于知道名字了

用户相册参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/photoaccesshelper-useralbum-guidelines

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


  1. 我是用的真机,nova13
  2. 相机拍摄的照片和视频是属于系统相册还是用户相册?
  3. 系统相册第一个获取的照片看起来是截图的
    • albumUri: file://media/PhotoAlbum/7
    • photoAsset displayName: Screenshot_20241204_080438_com.miHoYo.hkrpg.jpg
  4. 直接使用photoAccessHelper.getAssets好像也没办法根据相册名字来过滤,

Q2: 感觉的确有冲突, 不太好去欸的那个, 可以试一下phAccessHelper.getAlbums 的参数: phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER,photoAccessHelper.AlbumSubtype.ANY) 是否包含拍照的照片.

Q4: 使用 Album.getAssets接口获取图片资源每个相册的资源, 就区分开了不同的相册.

let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); let fetchOptions: photoAccessHelper.FetchOptions = { fetchColumns: [], predicates: predicates };

try { let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.ANY, fetchOptions) let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); console.info('get video album successfully, albumUri: ’ + album.albumUri); albumFetchResult.close(); } catch (err) { console.error('video failed with err: ’ + err); }

直接抛出了系统内部错误的异常video failed with err: Error: System inner fail,

试一下除了ANY 其他的subType呢, 如果不行至少系统相册那几个可以同步, 就是要看一下, 自己拍照的到底在哪个里面.,

用系统加any,全部log看了下,有一个是收藏夹,一个是video,一个是image。

再次测试之后,发现相机和截图混在一起了,,都在image类型下面,

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

说真的,相册备份需要顶级的资金实力和安全认证保障,小厂还是别掺和了

我自己用啊,又不是上架,

基本信息

  • 项目名称: 示例项目
  • 项目版本: v1.0.0
  • 项目状态: 开发中
  • 项目描述: 这是一个示例项目,用于演示如何将HTML内容转换为Markdown格式。

项目详情

  • 开发团队: 小组A
  • 联系方式: example@example.com
  • 更新日志:
    • v1.0.0: 初始版本发布
    • v1.0.1: 修复了一些bug

在HarmonyOS鸿蒙Next中,获取相机相册可以通过PhotoAccessHelper API实现。首先,使用PhotoAccessHelper.getPhotoAccessHelper(context)获取相册助手实例。然后,调用getAlbums()方法获取相册列表,或使用getAssets()方法获取相册中的照片和视频。通过PhotoAsset对象可以访问具体的媒体文件。

在HarmonyOS Next中获取相册数据需要注意以下几点:

  1. 权限检查:
  • 确保已在config.json中声明ohos.permission.READ_IMAGEVIDEO权限
  • 已通过requestPermissionsFromUser动态申请权限
  1. 获取相册的正确方式: 建议使用以下代码获取用户相册:
let albumFetchOptions = {
    selections: '',
    selectionArgs: [],
};
let fetchResult = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions);
  1. 常见问题排查:
  • 检查是否在onCreate阶段过早调用API
  • 确认设备上确实存在用户创建的相册
  • 检查返回的Album对象是否包含有效字段
  1. 替代方案: 如果仍无法获取,可以尝试通过获取所有媒体资源后自行分类:
let fetchOptions = {
    selections: '',
    selectionArgs: [],
};
let fetchResult = await phAccessHelper.getAssets(fetchOptions);

注意:系统相册可能需要更高权限才能访问完整信息。

回到顶部