如何获取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
是否因为调试机, 就是没有 photoAccessHelper.AlbumType.USER 类型的相册?
备份的话, 要是系统所有相册了,
关于取得系统相册但是没有相册名, 是否因为系统相册名字是固定的. 拿到系统相册的类型就相当于知道名字了
用户相册参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/photoaccesshelper-useralbum-guidelines
更多关于如何获取HarmonyOS鸿蒙Next中相机相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
- 我是用的真机,nova13
- 相机拍摄的照片和视频是属于系统相册还是用户相册?
- 系统相册第一个获取的照片看起来是截图的
- albumUri: file://media/PhotoAlbum/7
- photoAsset displayName: Screenshot_20241204_080438_com.miHoYo.hkrpg.jpg
- 直接使用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鸿蒙Next中,获取相机相册可以通过PhotoAccessHelper
API实现。首先,使用PhotoAccessHelper.getPhotoAccessHelper(context)
获取相册助手实例。然后,调用getAlbums()
方法获取相册列表,或使用getAssets()
方法获取相册中的照片和视频。通过PhotoAsset
对象可以访问具体的媒体文件。
在HarmonyOS Next中获取相册数据需要注意以下几点:
- 权限检查:
- 确保已在config.json中声明ohos.permission.READ_IMAGEVIDEO权限
- 已通过requestPermissionsFromUser动态申请权限
- 获取相册的正确方式: 建议使用以下代码获取用户相册:
let albumFetchOptions = {
selections: '',
selectionArgs: [],
};
let fetchResult = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions);
- 常见问题排查:
- 检查是否在onCreate阶段过早调用API
- 确认设备上确实存在用户创建的相册
- 检查返回的Album对象是否包含有效字段
- 替代方案: 如果仍无法获取,可以尝试通过获取所有媒体资源后自行分类:
let fetchOptions = {
selections: '',
selectionArgs: [],
};
let fetchResult = await phAccessHelper.getAssets(fetchOptions);
注意:系统相册可能需要更高权限才能访问完整信息。