鸿蒙Next如何调用相机拍照

在鸿蒙Next系统中,如何调用相机实现拍照功能?需要哪些权限和API接口?代码示例能否提供一下?

2 回复

鸿蒙Next调用相机?简单!用CameraKit的API,先申请权限,再创建预览,最后调用capture()咔嚓一下!记得处理回调,不然照片就“迷路”了~代码别写错,否则相机会对你“自闭”哦!

更多关于鸿蒙Next如何调用相机拍照的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,调用相机拍照可以通过CameraKitWant机制实现。以下是基本步骤和示例代码:

步骤概述:

  1. 权限申请:在module.json5中声明相机权限。
  2. 创建Want对象:指定启动相机应用。
  3. 启动相机:通过startAbilityForResult调用系统相机。
  4. 处理返回结果:在onAbilityResult中接收照片数据。

示例代码:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { camera } from '@kit.CameraKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 1. 权限配置(module.json5中添加):
// "requestPermissions": [
//   {
//     "name": "ohos.permission.CAMERA"
//   }
// ]

export default class EntryAbility extends UIAbility {
  // 启动相机拍照
  private takePhoto() {
    let want: Want = {
      bundleName: 'com.huawei.camera', // 系统相机包名
      abilityName: 'com.huawei.camera.MainAbility',
      parameters: { // 传递参数
        'mode': 'photo' // 拍照模式
      }
    };

    try {
      this.context.startAbilityForResult(want, (err: BusinessError, data) => {
        if (err) {
          console.error('启动相机失败: ' + JSON.stringify(err));
          return;
        }
        // 处理返回的照片数据(URI格式)
        if (data?.uri) {
          console.info('照片路径: ' + data.uri);
          // 可通过`@kit.ImageKit`处理图片
        }
      });
    } catch (error) {
      console.error('捕获异常: ' + JSON.stringify(error));
    }
  }

  // 2. 在UI中触发拍照(例如按钮点击)
  onWindowStageCreate() {
    // 界面创建后调用示例
    this.takePhoto();
  }
}

注意事项:

  • 权限动态申请:首次使用需通过abilityAccessCtrl动态申请权限。
  • 相机可用性:检查设备是否支持相机(cameraManager.getSupportedCameras())。
  • 图片处理:返回的URI需通过@kit.ImageKit解码或显示。

扩展场景:

如需自定义相机界面,可使用CameraOutputCapabilityXComponent实现更复杂控制(需额外配置渲染组件)。

通过以上代码即可快速实现鸿蒙Next的基础拍照功能。

回到顶部