开发者必看!如何在HarmonyOS中快速调用摄像头功能

摘要

在 HarmonyOS NEXT 中开发原生应用时,很多功能都涉及调用系统设备能力,比如摄像头、定位、传感器等。本文将以摄像头调用为例,介绍如何通过 ArkTS 编写可运行的预览、拍照、扫码等功能模块。文章会包含完整代码、关键权限说明、使用组件绑定预览画面的方式,以及多个实际场景的代码示例和讲解,适合鸿蒙新手开发者快速上手。

引言

随着设备类型的多样化(手机、手表、智能屏、车机等),对系统能力的调用已经是鸿蒙开发中的基本操作。无论是开发扫码登录的小程序,还是做远程视频采集的设备,摄像头都是核心入口之一。

ArkTS 作为鸿蒙原生开发语言,提供了清晰的 API 接口和模块化能力,让开发者可以快速接入并调用硬件功能。

调用摄像头进行视频预览

模块准备与权限声明

在开发摄像头功能之前,首先要确保应用配置中申请了摄像头权限。在 module.json5 中添加如下内容:

json 复制代码
"requestPermissions": [
  {
    "name": "ohos.permission.CAMERA"
  }
],
"deviceCapabilities": [
  "camera"
]

基础流程与代码实现

步骤解析

鸿蒙调用摄像头的一般流程如下:

  1. 获取摄像头管理器(CameraManager)
  2. 获取摄像头 ID(默认前/后置)
  3. 打开摄像头设备
  4. 创建输入流(CameraInput)
  5. 创建预览输出(PreviewOutput)
  6. 启动预览

完整代码 + 逐行解释

ts 复制代码
import camera from '@ohos.multimedia.camera';

let cameraManager = camera.getCameraManager(); // 获取摄像头管理器对象
let cameraDevice;     // 摄像头设备实例
let cameraInput;      // 输入流实例
let previewOutput;    // 输出流实例

// 获取所有可用摄像头ID(可能是前置、后置等)
cameraManager.getSupportedCameras().then((cameraArray) => {
  let cameraId = cameraArray[0]; // 默认使用第一个摄像头(通常为后置)

  // 打开摄像头设备
  cameraManager.openCamera(cameraId).then((device) => {
    cameraDevice = device;

    // 创建输入流(负责采集)
    cameraDevice.createCameraInput().then((input) => {
      cameraInput = input;

      // 创建预览输出流,供界面展示用
      cameraDevice.createPreviewOutput().then((output) => {
        previewOutput = output;

        // 启动采集并将数据流输出到预览中
        cameraDevice.startCapture([cameraInput], [previewOutput]).then(() => {
          console.info("摄像头预览启动成功");
        });
      });
    });
  });
});

如何将预览画面显示在界面上?

ArkTS UI 中的 Surface 控件可以作为摄像头画面承载组件:

ts 复制代码
@Entry
@Component
struct CameraPreviewPage {
  private previewSurface: any;

  build() {
    Column() {
      Text('摄像头预览').fontSize(20)

      // 预览画面绑定 Surface
      Surface({ id: 'cameraPreview' })
        .width('100%')
        .height(400)
        .onLoad((surface) => {
          this.previewSurface = surface;

          // 将 previewOutput 绑定到 UI surface
          if (previewOutput) {
            previewOutput.surface = surface;
          }
        })
    }
  }
}

典型场景应用与实战示例

场景 1:扫码识别功能

用于门禁扫码、App登录、付款二维码识别等。

ts 复制代码
import barcode from '@ohos.barcode'; // 假设已支持该模块

// 在预览输出回调中,监听每帧画面并进行识别
previewOutput.on('frame', (frameData) => {
  barcode.decode(frameData).then((result) => {
    if (result.success) {
      console.log("扫码内容:", result.text);
    }
  });
});

提示:扫码需要额外权限 ohos.permission.READ_MEDIAohos.permission.CAMERA,并配合图像识别框架使用。

场景 2:证件拍照并上传

用于表单提交、人脸认证等业务。

ts 复制代码
cameraDevice.takePhoto().then((photoData) => {
  // photoData 是 Uint8Array 格式的图片数据
  uploadImage(photoData);
});

function uploadImage(data: Uint8Array) {
  // 调用上传服务
  console.info('正在上传图片,长度:', data.length);
}

场景 3:远程视频监控(简版)

结合 WebSocket 或 HTTP 推流,采集预览帧并上传。

ts 复制代码
previewOutput.on('frame', (frameData) => {
  // 将画面帧编码为流数据,然后通过 WebSocket 发送
  sendFrameToServer(frameData);
});

function sendFrameToServer(data: Uint8Array) {
  // 示例发送逻辑
  console.log('发送帧大小:', data.length);
}

QA 常见问题答疑

问:摄像头打不开怎么办?

  • 检查权限是否声明和授权
  • 确保当前设备支持摄像头模块(模拟器部分机型不支持)
  • 检查摄像头是否已被占用

问:怎么切换前后摄像头?

调用 getSupportedCameras() 后遍历摄像头数组,判断 cameraType'front''back',切换即可。

问:拍照保存的照片如何本地持久化?

需要使用文件系统模块 @ohos.file.fs,将图片数据写入本地文件。

总结

鸿蒙系统在调用设备能力方面提供了统一、模块化的 API 接口,配合 ArkTS 语法,开发效率和代码可读性都非常高。本文围绕摄像头进行了完整的演示,涵盖:

  • 权限声明
  • 基本调用流程
  • UI 绑定预览画面
  • 拍照、扫码、监控等多个实际场景

未来你可以用类似方式继续探索蓝牙、麦克风、传感器等设备能力,构建更复杂、更智能的应用。

相关推荐
梦想不只是梦与想36 分钟前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
大锅盖13 小时前
Web 工单要调用相机,第一步不是打开取景框,而是建立能力门禁
前端·数码相机·harmonyos
贾伟康7 小时前
【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
移动开发·harmonyos·arkts·arkui·本地搜索
大龄秃头程序员8 小时前
Flutter 项目鸿蒙适配实战:从环境搭建到多环境打包全指南
harmonyos
贾伟康9 小时前
【万能转换器|18】HarmonyOS ArkTS 权限与隐私实战:让 module.json5、功能说明和拒绝路径一致
移动开发·harmonyos·arkts·权限管理·隐私合规
贾伟康10 小时前
【万能转换器|19】HarmonyOS ArkTS 回归测试实战:覆盖启动、空数据、异常输入和重复点击
软件测试·移动开发·harmonyos·arkts·回归测试
UnicornIT11 小时前
【HarmonyOS】时间管理类APP:做成“自适应“
ui·华为·harmonyos·鸿蒙
less_1213811 小时前
HarmonyOS WPS Open SDK:不落地、水印与功能开关的合规打开策略
华为·harmonyos·wps
贾伟康12 小时前
【万能转换器|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
移动开发·harmonyos·arkts·appgallery·应用发布
OH_TPC1 天前
HarmonyOS APP开发---“滤镜大师“图像处理App,需要用到这个库
java·图像处理·华为·harmonyos·鸿蒙