HarmonyOS 鸿蒙Next文件宽度

HarmonyOS 鸿蒙Next文件宽度

如何解决读取图库中的视频文件宽度出现Crash

3 回复

读取图库中的视频文件宽度出现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


鸿蒙Next文件宽度指开发中UI组件的宽度属性设置。在ArkTS中通过Width、Width百分比或Auto自适应等方式定义。开发者可在组件属性中直接设置具体数值(如120px)、屏幕比例(如’50%’)或使用系统预置枚举值(如Auto、Fill)。布局容器会根据父容器约束和内容自动计算最终渲染宽度。

在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格式错误或元数据解析异常等关键错误码。

回到顶部