HarmonyOS 鸿蒙Next怎么判断图片是否为Live图片?
HarmonyOS 鸿蒙Next怎么判断图片是否为Live图片?
鸿蒙上面怎么判断一个图片资源是否为live图片?
当前使用 photoViewPicker.select(photoSelectOptions) 从系统相册获取到的结果也只是一个uri数组,查官方文档说是需要使用 photoAccessHelper.getPhotoAccessHelper().getAssets() 方法进行媒体查询,但是 getAssets 这个方法又需要 ohos.permission.READ_IMAGEVIDEO 权限。这个权限申请又很麻烦,容易导致应用上架被拒绝!
那到底应该怎么判断一个图片是否为live图?求大佬指教 /抱拳
更多关于HarmonyOS 鸿蒙Next怎么判断图片是否为Live图片?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
通过picker的方式调用该接口来查询指定URI对应的图片或视频资源,不需要申请’ohos.permission.READ_IMAGEVIDEO’权限.

判断是否是Live图片:
import { dataSharePredicates } from '@kit.ArkData';
async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) {
console.info('getAssets');
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [
photoAccessHelper.PhotoKeys.WIDTH, // 图片宽度
photoAccessHelper.PhotoKeys.HEIGHT, // 图片高度
photoAccessHelper.PhotoKeys.DURATION, // 持续时间
photoAccessHelper.PhotoKeys.SIZE, // 文件大小
photoAccessHelper.PhotoKeys.DISPLAY_NAME, // 显示名字
photoAccessHelper.PhotoKeys.ORIENTATION, // 图片文件的方向
photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE], // 媒体文件的子类型,
predicates: predicates
};
phAccessHelper.getAssets(fetchOptions, async (err, fetchResult) => {
if (fetchResult !== undefined) {
console.info('fetchResult success');
let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
if (photoAsset !== undefined) {
console.info('photoAsset.displayName : ' + photoAsset.displayName);
}
const subType = photoAsset.get(photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE);
// 是否是动态照片文件类型
if (subType === photoAccessHelper.PhotoSubtype.MOVING_PHOTO) {
}
} else {
console.error(`fetchResult fail with error: ${err.code}, ${err.message}`);
}
});
}
更多关于HarmonyOS 鸿蒙Next怎么判断图片是否为Live图片?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,通过picker的方式调用该接口来查询指定URI对应的图片或视频资源,不需要申请’ohos.permission.READ_IMAGEVIDEO’权限,详情请参考指定URI获取图片或视频资源。
在HarmonyOS Next中,通过PhotoAccessHelper查询媒体项,检查其mediaType与subType属性。若subType值为PHOTO_SUBTYPE_LIVE,则该图片为Live图片。也可通过ImageSource读取图片的extraInfo中isLivePhoto字段为true来判断。
不用申请 ohos.permission.READ_IMAGEVIDEO 权限。
你通过 PhotoViewPicker 选中的图片,系统已经赋予了临时的读写权限。利用这个临时权限,使用 getAssets 接口查询其元数据,就能判断是否为动态照片了。
核心是检查 PhotoKeys.PHOTO_SUBTYPE 的值是否等于 PhotoSubtype.MOVING_PHOTO。
参考代码如下:
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { dataSharePredicates } from '@kit.ArkData';
async function checkIfLivePhoto(uri: string): Promise<boolean> {
try {
let helper = photoAccessHelper.getPhotoAccessHelper(getContext());
// 基于 URI 构建查询条件
let predicates = new dataSharePredicates.DataSharePredicates();
predicates.equalTo(photoAccessHelper.PhotoKeys.URI, uri);
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE],
predicates: predicates
};
const fetchResult = await helper.getAssets(fetchOptions);
const asset = await fetchResult.getFirstObject();
// 核心逻辑:判断子类型
return asset.photoSubType === photoAccessHelper.PhotoSubtype.MOVING_PHOTO;
} catch (err) {
console.error('查询失败:', JSON.stringify(err));
return false;
}
}
这样既不用申请敏感权限,也能准确判断是否为 Live 图。

