You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用相机拍照时onActivityResult中Activity.RESULT_OK始终返回-1求助

问题分析与解决

嘿,我一眼就发现你代码里的关键错误了!你的onActivityResult方法里的判断逻辑完全搞混了requestCode和resultCode的作用,这才导致条件始终不成立。

错误点解析

你现在写的第一个判断条件是:

if (requestCode == Activity.RESULT_OK)

这完全是逻辑错误:

  • requestCode是你启动相机时传入的REQUEST_CAMERA(值为1),用来区分不同的请求;
  • Activity.RESULT_OK是系统返回的成功结果码(值为-1),属于resultCode的判断范畴。

把这两个值做相等判断,结果当然永远是false!

修正后的代码

把判断逻辑调整为先验证请求码,再验证结果码,代码如下:

final int REQUEST_CAMERA = 1;

// 启动相机的代码不变
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_CAMERA);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 先判断是不是相机请求,再判断结果是否成功
    if (requestCode == REQUEST_CAMERA) {
        if (resultCode == Activity.RESULT_OK) {
            Bundle bundle = data.getExtras();
            Bitmap btm = (Bitmap) bundle.get("data");
            _ivDoc.setImageBitmap(btm);
        } else {
            // 可以在这里处理用户取消拍照的情况
            Toast.makeText(this, "拍照已取消", Toast.LENGTH_SHORT).show();
        }
    }
}

额外注意事项

  1. 权限问题:如果你的App运行在Android 6.0(API 23)及以上系统,别忘了动态申请相机权限,否则相机可能无法启动,直接返回失败结果。
  2. 高清图片获取:当前代码获取的是相机返回的缩略图,如果需要获取高清原图,你需要指定图片的保存路径,在启动相机时通过EXTRA_OUTPUT传递给Intent,之后在onActivityResult里从指定路径读取图片。

内容的提问来源于stack exchange,提问作者satyender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:16:03