【HarmonyOS NEXT】调用系统相机拍照后,未成功将结果带回应用中,同时应用进程也被干掉了

 

【关键字】

 系统相机 /  调用异常

【问题描述】

调用系统相机拍照后,未成功将结果带回应用中,同时应用进程也被干掉了。

具体实现代码如下:

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%')
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值