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中调用相机和相册功能的关键点如下:
- 权限配置:
- 需要在module.json5中声明相机权限ohos.permission.CAMERA
- 相册访问不需要额外权限声明
- 相机调用:
- 使用
cameraPicker.pick()
方法 - 通过
PickerProfile
配置相机参数(如后置摄像头) - 返回结果包含图片URI
- 相册调用:
- 使用
PhotoViewPicker.select()
方法 - 通过
PhotoSelectOptions
设置选择参数(如图片类型、最大选择数量) - 返回结果包含所选图片URI数组
- 注意事项:
- 异步方法需要使用
async/await
处理 - 错误处理建议使用
try-catch
捕获BusinessError
- 获取的URI可直接用于图片显示或传递
代码示例已展示了完整的实现流程,包括权限声明、相机调用、相册选择和结果处理。实际使用时可根据需求调整PickerProfile
和PhotoSelectOptions
参数。