HarmonyNote.TOP鸿蒙开发笔记

鸿蒙应用开发中cameraPicker唤起相机拍照实践

从鸿蒙API 12版本开始,唤起相机拍照或拍视频有一种简单的实现方式,即通过CameraKit组件中的cameraPicker来唤起相机。首选需要声明一个cameraPicker.PickerProfile类型的配置实例,可以只指定一个cameraPosition参数,这个参数代表前置镜头或后置镜头,是一个枚举类型,枚举项如下:

camera.CameraPosition.CAMERA_POSITION_UNSPECIFIED:不指定前置或后置镜头
camera.CameraPosition.CAMERA_POSITION_BACK:指定后置镜头
camera.CameraPosition.CAMERA_POSITION_FRONT:指定前置镜头
camera.CameraPosition.CAMERA_POSITION_FOLD_INNER:指定折叠屏内镜头

声明一个cameraPicker.PickerProfile类型的配置实例代码如下:

const pickerConfig: cameraPicker.PickerProfile = {
  cameraPosition: camera.CameraPosition.CAMERA_POSITION_UNSPECIFIED
}

配置实例声明好以后,只需要调用cameraPicker的pick方法即可实现唤起相机拍照或拍视频了。pick方法的第二个参数声明可以拍照片还是拍视频,如果既要拍照又要拍视频,同时声明两个类型即可。示例代码如下:

const pickResult = await cameraPicker.pick(AppContextInstance.context, [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO], pickerConfig)

在页面加一个拍照测试按钮,点击按钮唤起相机拍照,示例代码如下:

build() {
  Column() {
    Button('拍照')
      .onClick(() => {
        this.openCamera()
      })
  }
}

如果正常完成拍照,pickResult接收到的数据格式如下:

{
  "resultCode": 0,
  "resultUri": "file://media/Photo/73/IMG_1749397183_058/IMG_20250608_233803.jpg",
  "mediaType": "photo"
}

如果未能正常完成拍摄,pickResult接收到的数据格式如下:

{
  "resultCode": -1,
  "resultUri": "",
  "mediaType": "photo"
}

由此可见,resultCode为-1表示未正常完成拍摄,resultCode为0时表示正常完成拍摄,并返回照片的文件绝对路径。