HarmonyOS鸿蒙NEXT中如何拉起手机摄像头拍照或从相册中选取图片

HarmonyOS鸿蒙NEXT中如何拉起手机摄像头拍照或从相册中选取图片 核心技术:相机服务Camera Kit

请参见官方资料:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-overview

一、申请相机权限

打开src>>main>>module.json5文件,在requestPermissions数组中添加ohos.permission.CAMERA

{
    "name": "ohos.permission.CAMERA",
    "reason": "$string:camera_reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
}

二、定义拉起手机摄像头异步方法

/**
 * 拍照
 */
async pickerCamera():Promise<void>{
  try {
    let pProfile:cameraPicker.PickerProfile={
      cameraPosition:camera.CameraPosition.CAMERA_POSITION_BACK
    };
    let pResult:cameraPicker.PickerResult=await cameraPicker.pick(getContext(this)
    ,[cameraPicker.PickerMediaType.PHOTO],pProfile);
    this.photoUri=pResult.resultUri;
    console.log(this.photoUri);
    let pModel:PestModel =new PestModel();
    pModel.Img=this.photoUri;
    // 跳转病害详情页面
    router.pushUrl({url:'pages/PestInfoPage',params:pModel});
  } catch (err){
    console.error((err as BusinessError).message);
  }
}

三、定义打开手机相册异步方法

/**
 * 从相册选择
 */
async getPhotoFromAlbum():Promise<void>{
  let photoSelectOpt=new photoAccessHelper.PhotoSelectOptions();
  photoSelectOpt.MIMEType=photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
  photoSelectOpt.maxSelectNumber=1;
  let photoPicker=new photoAccessHelper.PhotoViewPicker();
  let photoSelectResult:photoAccessHelper.PhotoSelectResult=await photoPicker.select(photoSelectOpt);
  this.photoUri=photoSelectResult.photoUris[0];
  console.log(this.photoUri);
  if(this.photoUri !==undefined){
    let pModel:PestModel =new PestModel();
    pModel.Img=this.photoUri;
    // 跳转病害详情页面
    router.pushUrl({url:'pages/PestInfoPage',params:pModel});
  }
}

打开手机摄像头拍照或从相册选择图片后,跳转到病虫害详情页面,展示该图片及更多信息。


更多关于HarmonyOS鸿蒙NEXT中如何拉起手机摄像头拍照或从相册中选取图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS NEXT中,使用@ohos.multimedia.camera模块控制摄像头拍照。调用camera.getCameraManager()获取管理器,创建CameraInputPhotoOutput完成拍摄。相册选取使用@ohos.file.picker模块,通过photoViewPicker.select()启动图片选择器,返回选中文件的URI。需在module.json5中声明ohos.permission.CAMERAohos.permission.READ_MEDIA权限。拍摄的图片默认存储在媒体库,可通过PhotoAccessHelper管理。

更多关于HarmonyOS鸿蒙NEXT中如何拉起手机摄像头拍照或从相册中选取图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS NEXT中调用相机和相册功能的关键点如下:

  1. 权限配置:
  • 需要在module.json5中声明相机权限ohos.permission.CAMERA
  • 相册访问不需要额外权限声明
  1. 相机调用:
  • 使用cameraPicker.pick()方法
  • 通过PickerProfile配置相机参数(如后置摄像头)
  • 返回结果包含图片URI
  1. 相册调用:
  • 使用PhotoViewPicker.select()方法
  • 通过PhotoSelectOptions设置选择参数(如图片类型、最大选择数量)
  • 返回结果包含所选图片URI数组
  1. 注意事项:
  • 异步方法需要使用async/await处理
  • 错误处理建议使用try-catch捕获BusinessError
  • 获取的URI可直接用于图片显示或传递

代码示例已展示了完整的实现流程,包括权限声明、相机调用、相册选择和结果处理。实际使用时可根据需求调整PickerProfilePhotoSelectOptions参数。

回到顶部