HarmonyOS 鸿蒙Next文件宽度
HarmonyOS 鸿蒙Next文件宽度
如何解决读取图库中的视频文件宽度出现Crash
读取图库中的视频文件宽度出现Crash可能原因,可按照以下方法排查
- 读取视频文件失败,width不存在。
- 获取宽度的方式错误。
查看视频是否成功读取的,如果视频可以读取,检查是否在fetchColumns中填入需要get的PhotoKeys,width,photoAccessHelper.PhotoAsset.get()接口仅支持’uri’、‘media_type’、‘subtype’、'display_name’四个属性的查询,其他查询需要在fetchColumns中填入需要get的PhotoKeys,例如:get width属性fetchColumns: [‘width’]。
【修改建议】
读取图库中的视频文件宽度需要在fetchColumns中填入需要get的PhotoKeys进行宽度查询,可参考
// 在配置项的fetchColumns中添加需要获得的宽度属性
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: ['width'],
predicates: predicates
};
【背景知识】
更多关于HarmonyOS 鸿蒙Next文件宽度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中读取图库视频文件宽度时出现Crash,通常涉及以下几个关键排查点:
权限配置
确保在module.json5中声明了正确的媒体文件访问权限:
"requestPermissions": [
{
"name": "ohos.permission.READ_IMAGEVIDEO"
}
]
动态权限申请需通过requestPermissionsFromUser接口完成。
媒体文件URI处理
使用@ohos.file.picker选择视频后,需通过PhotoViewPicker获取安全的URI:
let photoPicker = new picker.PhotoViewPicker();
let result = await photoPicker.select(photoSelectOptions);
const uri = result.photoUris[0];
媒体元数据解析
推荐使用@ohos.multimedia.mediaLibrary或@ohos.file.fs解析视频尺寸:
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
// 通过mediaLibrary获取视频文件Asset
let asset = await mediaLibrary.getFileAssets(/* 查询条件 */);
let width = asset.get(mediaLibrary.FileAssetKey.WIDTH);
异步操作与异常捕获
所有文件操作需在异步上下文中执行,并严格捕获异常:
try {
let file = await fs.open(uri, fs.OpenMode.READ_ONLY);
// 解析视频元数据...
} catch (err) {
console.error(`Crash caught: ${err.code}, ${err.message}`);
}
资源释放
通过fs.close()及时释放文件描述符,避免资源泄漏引发Crash。
若问题持续存在,建议通过DevEco Studio的日志系统定位具体堆栈信息,重点关注权限拒绝、URI格式错误或元数据解析异常等关键错误码。


