鸿蒙开发-通过系统相机拍照和录像

443 阅读3分钟

在鸿蒙开发中,调用系统相机是一项关键的功能需求。

对于许多应用场景而言,拍照功能是不可或缺的。 比如社交类应用,用户可以通过拍照分享自己的生活瞬间; 办公类应用可能需要拍照来记录文档、白板内容等; 电商类应用可以让用户拍摄商品照片进行反馈或分享。

因此,在鸿蒙开发中能够顺利调用系统相机,能极大地丰富应用的功能,提升用户体验。

那么鸿蒙中如何调用系统相机进行拍摄呢

开发步骤

1.首选需要配置PickerProfile

理由如下

1、PickerProfile 的 saveUri 作用及默认行为

PickerProfilesaveUri是一个可选参数。在鸿蒙开发中,当未配置这个参数时,拍摄的照片和视频会默认存入媒体库中。这为开发者提供了一种便捷的方式,在不需要特殊指定存储路径时,可以直接利用系统默认的存储位置。

2、不存入媒体库的处理方式

如果不想将照片和视频存入媒体库,开发者可以自行配置应用沙箱内的文件路径。这样可以更加灵活地控制拍摄内容的存储位置,满足特定应用场景的需求。例如,对于一些对数据存储有特殊要求的应用,或者需要对拍摄内容进行特定处理后再存储的情况,自行配置文件路径可以提供更大的控制权。

3、应用沙箱内文件的要求

应用沙箱内的这个文件必须是一个存在的、可写的文件。这是确保系统相机能够正常写入拍摄内容的重要前提。如果文件不存在或者不可写,系统相机在拍摄结束后将无法进行覆盖写入操作,从而导致拍摄功能出现异常。

// 获取上下文的文件目录,用于存储文件
let pathDir = getContext().filesDir;
// 生成一个基于当前时间戳的文件名,确保文件名唯一
let fileName = new Date()
// 拼接文件路径和扩展名
let filePath = pathDir + `/${fileName}.tmp`
// 创建一个随机访问文件,指定文件打开模式为创建新文件
fs.createRandomAccessFileSync(filePath, fs.OpenMode.CREATE);

// 从文件路径生成URI,用于在 picker 中选择
let uri = fileuri.getUriFromPath(filePath);
// 配置 picker 的选择器属性
let pickerProfile: picker.PickerProfile = {
  // 设置摄像头位置为后置摄像头
  cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK,
  // 设置保存的URI,用于在选择后保存数据
  saveUri: uri
};

2.调用picker拍摄接口获取拍摄的结果

// 使用picker组件选择媒体文件
let result: picker.PickerResult =
  await picker.pick(
    getContext(), 
    [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO],
    pickerProfile);

参数含义

getContext(): 获取当前应用的上下文

picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO :指定选择的媒体类型

pickerProfile: 配置文件

拍照和录像后会在应用沙箱生成缓冲文件 image.png

根据打印结果可知,当resultCode为0 时,表示成功 image.png

3.绑定数据并展示

// 检查结果码是否为0,表示选择媒体文件成功
##if (result.resultCode == 0) {
  // 判断选择的媒体文件类型
  if (result.mediaType === picker.PickerMediaType.PHOTO) {
    // 如果选择的是照片,则将照片的URI赋值给this.imgSrc
    this.imgSrc = result.resultUri;
  } else {
    // 如果选择的不是照片(即视频),则将视频的URI赋值给this.videoSrc
    this.videoSrc = result.resultUri;
  }
}

效果图

点击打开相机进入拍照界面

image.png

image.png