鸿蒙Next语法如何保存视频到相册

在鸿蒙Next开发中,如何通过代码实现将视频文件保存到系统相册?需要调用哪些API接口?具体实现步骤是什么?是否有权限要求或者其他需要注意的事项?

2 回复

鸿蒙Next保存视频到相册?简单!用PhotoAccessHelpercreateAsset()方法,把视频流塞进去就行。记得先申请权限,不然系统会像没带钥匙的室友一样把你拦在门外。代码一写,视频秒存,稳如老狗!

更多关于鸿蒙Next语法如何保存视频到相册的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,保存视频到相册主要涉及 媒体库管理文件存储权限。以下是实现步骤和示例代码:

步骤概述:

  1. 申请存储权限:在 module.json5 中配置权限。
  2. 创建视频文件:指定保存路径(相册目录)。
  3. 写入视频数据:将视频数据写入文件。
  4. 通知媒体库更新:刷新相册显示新视频。

示例代码(ArkTS):

import fs from '@ohos.file.fs';
import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import common from '@ohos.app.ability.common';

// 1. 申请权限(在 module.json5 中添加)
// "requestPermissions": [
//   {
//     "name": "ohos.permission.READ_MEDIA",
//     "reason": "$string:reason_desc",
//     "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
//   },
//   {
//     "name": "ohos.permission.WRITE_MEDIA",
//     "reason": "$string:reason_desc",
//     "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
//   }
// ]

async function saveVideoToGallery(context: common.Context, videoData: ArrayBuffer) {
  // 2. 获取媒体库实例
  const media = mediaLibrary.getMediaLibrary(context);
  
  // 3. 创建视频文件(保存到相册目录)
  const publicDirectory = mediaLibrary.DirectoryType.DIR_VIDEO; // 视频目录
  const displayName = `video_${Date.now()}.mp4`; // 文件名
  let publicFile: mediaLibrary.FileAsset;
  try {
    publicFile = await media.createAsset(
      mediaLibrary.MediaType.VIDEO,
      displayName,
      publicDirectory
    );
  } catch (err) {
    console.error('创建文件失败:', err);
    return;
  }

  // 4. 写入视频数据
  try {
    const file = await fs.open(publicFile.uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    await fs.write(file.fd, videoData);
    await fs.close(file.fd);
  } catch (err) {
    console.error('写入视频失败:', err);
    return;
  }

  // 5. 通知媒体库刷新(可选,系统通常会自动检测)
  console.log('视频已保存到相册: ' + publicFile.uri);
}

// 调用示例(在Ability中)
// saveVideoToGallery(getContext(), videoData);

关键说明:

  • 权限配置:必须声明 READ_MEDIAWRITE_MEDIA 权限。
  • 路径处理:使用 mediaLibrary API 确保文件保存到系统相册目录。
  • 数据来源videoData 需是 ArrayBuffer 类型(例如从网络下载或录制获取)。

注意事项:

  • 鸿蒙Next的API可能随版本更新,请参考官方媒体库文档调整。
  • 真实场景需处理用户动态授权(通过 abilityAccessCtrl 请求权限)。

通过以上代码,可正确将视频保存至相册并自动显示。

回到顶部