【关键字】
系统相机 / 调用异常
【问题描述】
调用系统相机拍照后,未成功将结果带回应用中,同时应用进程也被干掉了。
具体实现代码如下:
async takePhotoddf(context:Context) {
await abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, ['ohos.permission.CAMERA', 'ohos.permission.READ_MEDIA'])
let contextww = context as common.UIAbilityContext
let result = await contextww.startAbilityForResult({ action: "ohos.want.action.imageCapture" })
// 照片uri
console.error(this.TAG, 'PhotoViewPicker result uri: ' + result.want.uri );
}
/**
* 拍照
*/
public async takePhoto(context: common.UIAbilityContext): Promise<MediaBean> {
let want = {
'uri': '',
'action': wantConstant.Action.ACTION_IMAGE_CAPTURE,
'parameters': {},
};
return context.startAbilityForResult(want)
.then((result) => {
console.info(this.TAG, `startAbility call back , ${JSON.stringify(result)}`);
if (result.resultCode === 0 && result.want && result.want.uri !=='') {
//拍照成功
console.info(this.TAG, 'takePhoto successfully, takePhotoResult uri: ' + result.want.uri);
return result.want.uri;
}
}).catch((error) => {
console.info(this.TAG, `startAbility error , ${JSON.stringify(error)}`);
return error;
}).then(async (uri: string) => {
const mediaBean = await this.buildMediaBean(uri);
return mediaBean;
});
}
【解决方案】
拍照后返回原应用,需要在want里的parameters中添加需要返回的包名信息,拍照结果图需存在result.want.parameters['resourceUri']中。
示例代码如下:
import { BusinessError } from '@ohos.base';
import wantConstant from '@ohos.ability.wantConstant';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct Index {
context = getContext(this) as common.UIAbilityContext
private TAG:string = 'takePhoto:'
@State url: string = ''
/**
* 拍照
*/
async takePhoto(context: common.UIAbilityContext) {
let want: object =new Object({
action: wantConstant.Action.ACTION_IMAGE_CAPTURE,
parameters: new Object({callBundleName:"com.example.myapplication",}),
});
return context.startAbilityForResult(want)
.then((result) => {
console.info(this.TAG, `startAbility call back , ${JSON.stringify(result)}`);
if (result.want != undefined && result.want.parameters != undefined &&
result.want.parameters['resourceUri']!== undefined) {
this.url = result.want.parameters['resourceUri'].toString()//获取相片uri数据
//拍照成功
console.info(this.TAG, 'takePhoto successfully, takePhotoResult uri: ' + result.want.parameters['resourceUri']);
}
}).catch((error:BusinessError) => {
console.info(this.TAG, `startAbility error , ${JSON.stringify(error)}`);
});
}
build() {
Column() {
Row() {
Button('点我').onClick(() => {
this.takePhoto(this.context);
})
}.height('100%')
}.width('100%')
}
}