【HarmonyOS】鸿蒙应用唤起系统相机拍照
方案一:
官方推荐的方式,使用CameraPicker来调用安全相机进行拍照。
dart
let pathDir = getContext().filesDir;
let fileName = `${new Date().getTime()}`
let filePath = pathDir + `/${fileName}.tmp`
fileIo.createRandomAccessFileSync(filePath, fileIo.OpenMode.CREATE);
let uri = fileUri.getUriFromPath(filePath);
let pickerProfile: picker.PickerProfile = {
cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK,
saveUri: uri // 用于保存图片
};
let result: picker.PickerResult =
await picker.pick(getContext(), [picker.PickerMediaType.PHOTO],
pickerProfile);
console.info(`picker resultCode: ${result.resultCode},resultUri: ${result.resultUri},mediaType: ${result.mediaType}`);
if (result.resultCode == 0) {
if (result.mediaType === picker.PickerMediaType.PHOTO) {
this.imgSrc = result.resultUri;
}
}
注意:
在应用调试时,开发者需在release模式下调用系统相机(CameraPicker)。
由于系统限制了debug模式下不允许调试release应用,在debug模式下调用系统相机,将导致异常。
方案二:
使用startAbility拉起相机系统应用,通过want接收回调信息。
dart
private async thirdPartyCall(supportMultiMode: boolean) {
this.isCrop = false;
console.log("thirdPartyCall savaPath=" + this.savePath);
// 拉起拍照功能
let want: Want = {
"action": 'ohos.want.action.imageCapture',
"parameters": {
supportMultiMode: supportMultiMode,
// 回调包名很重要,若不匹配将无法获取返回图片Uri的操作权限
callBundleName: "com.example.persontest"
}
};
// 获取图片uri
if (this.context) {
let result: common.AbilityResult = await this.context.startAbilityForResult(want);
let params = result?.want?.parameters as Record<string, string | number>
let imagePathSrc = params?.resourceUri as string;
console.info(this.TAG, 'thirdPartyCall imagePathSrc= ' + imagePathSrc);
console.info(this.TAG, 'thirdPartyCall params= ' + JSON.stringify(params));
await this.getImage(imagePathSrc);
}
}