在鸿蒙开发中,调用系统相机是一项关键的功能需求。
对于许多应用场景而言,拍照功能是不可或缺的。 比如社交类应用,用户可以通过拍照分享自己的生活瞬间; 办公类应用可能需要拍照来记录文档、白板内容等; 电商类应用可以让用户拍摄商品照片进行反馈或分享。
因此,在鸿蒙开发中能够顺利调用系统相机,能极大地丰富应用的功能,提升用户体验。
那么鸿蒙中如何调用系统相机进行拍摄呢
开发步骤
1.首选需要配置PickerProfile
理由如下
1、PickerProfile 的 saveUri 作用及默认行为
PickerProfile
的saveUri
是一个可选参数。在鸿蒙开发中,当未配置这个参数时,拍摄的照片和视频会默认存入媒体库中。这为开发者提供了一种便捷的方式,在不需要特殊指定存储路径时,可以直接利用系统默认的存储位置。2、不存入媒体库的处理方式
如果不想将照片和视频存入媒体库,开发者可以自行配置应用沙箱内的文件路径。这样可以更加灵活地控制拍摄内容的存储位置,满足特定应用场景的需求。例如,对于一些对数据存储有特殊要求的应用,或者需要对拍摄内容进行特定处理后再存储的情况,自行配置文件路径可以提供更大的控制权。
3、应用沙箱内文件的要求
应用沙箱内的这个文件必须是一个存在的、可写的文件。这是确保系统相机能够正常写入拍摄内容的重要前提。如果文件不存在或者不可写,系统相机在拍摄结束后将无法进行覆盖写入操作,从而导致拍摄功能出现异常。
// 获取上下文的文件目录,用于存储文件
let pathDir = getContext().filesDir;
// 生成一个基于当前时间戳的文件名,确保文件名唯一
let fileName = new Date()
// 拼接文件路径和扩展名
let filePath = pathDir + `/${fileName}.tmp`
// 创建一个随机访问文件,指定文件打开模式为创建新文件
fs.createRandomAccessFileSync(filePath, fs.OpenMode.CREATE);
// 从文件路径生成URI,用于在 picker 中选择
let uri = fileuri.getUriFromPath(filePath);
// 配置 picker 的选择器属性
let pickerProfile: picker.PickerProfile = {
// 设置摄像头位置为后置摄像头
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK,
// 设置保存的URI,用于在选择后保存数据
saveUri: uri
};
2.调用picker拍摄接口获取拍摄的结果
// 使用picker组件选择媒体文件
let result: picker.PickerResult =
await picker.pick(
getContext(),
[picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO],
pickerProfile);
参数含义
getContext()
: 获取当前应用的上下文
picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO
:指定选择的媒体类型
pickerProfile
: 配置文件
拍照和录像后会在应用沙箱生成缓冲文件
根据打印结果可知,当resultCode为0 时,表示成功
3.绑定数据并展示
// 检查结果码是否为0,表示选择媒体文件成功
##if (result.resultCode == 0) {
// 判断选择的媒体文件类型
if (result.mediaType === picker.PickerMediaType.PHOTO) {
// 如果选择的是照片,则将照片的URI赋值给this.imgSrc
this.imgSrc = result.resultUri;
} else {
// 如果选择的不是照片(即视频),则将视频的URI赋值给this.videoSrc
this.videoSrc = result.resultUri;
}
}
效果图
点击打开相机进入拍照界面