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

Android 拍照后如何区分触发按钮并更新对应ImageView资源

问题核心原因

  1. 两个按钮触发拍照时都使用了相同的请求码,onActivityResult无法区分拍照请求的触发来源,导致你现在只要有一次拍照完成就会同时修改两个ImageView的资源
  2. 取消拍照的分支存在代码错误:setImageResource() 方法只能接收Drawable类型的资源ID,你给第二个ImageView传入了字符串资源,运行时会触发崩溃

修复方案

第一步:新增区分按钮的请求码

在类成员变量位置新增两个独立的拍照请求码:

// 原有变量保留,新增两个不同的拍照请求码
static final int IMAGE_REQUEST_BTN1 = 1;
static final int IMAGE_REQUEST_BTN2 = 3;
private static final int PERMISSION_REQUEST = 2;
ImageView imageV, imageV2;

第二步:修改按钮触发逻辑,传入对应请求码

两个按钮启动拍照时分别传入不同的请求码:

// 第一个按钮逻辑
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent camara = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       if (camara.resolveActivity(getPackageManager()) != null) {
          // 传第一个按钮的请求码
          startActivityForResult(camara, IMAGE_REQUEST_BTN1);
       }
    }
});

// 第二个按钮逻辑
btnIne.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Intent camara = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
       if (camara.resolveActivity(getPackageManager()) != null) {
          // 传第二个按钮的请求码
          startActivityForResult(camara, IMAGE_REQUEST_BTN2);
       }
    }
 });

第三步:改造onActivityResult逻辑,按请求码更新对应控件

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 处理第一个按钮的拍照结果
    if (requestCode == IMAGE_REQUEST_BTN1) {
        if (resultCode == Activity.RESULT_OK) {
            imageV.setImageResource(R.drawable.image_view_2do);
        } else {
            imageV.setImageResource(R.drawable.image_view_1er);
        }
    }
    // 处理第二个按钮的拍照结果
    else if (requestCode == IMAGE_REQUEST_BTN2) {
        if (resultCode == Activity.RESULT_OK) {
            imageV2.setImageResource(R.drawable.image_view2_2do);
        } else {
            // 修正原来的错误,传入drawable资源ID而非字符串
            imageV2.setImageResource(R.drawable.image_view2_1er);
        }
    }
}

补充说明

如果你需要将相机实际拍摄的照片设置到ImageView,而非切换预设drawable,需要额外处理data.getExtras().get("data") 拿到的缩略图,或者配置FileProvider存储拍摄的原图再加载。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:03