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

Android相机Activity传递ResultInfo失败问题求助

问题分析与解决方案

首先,咱们得先搞清楚为什么data会是null——这其实不是BUG,是相机Intent的正常行为!当你通过MediaStore.EXTRA_OUTPUT指定了图片的保存路径时,相机App会直接把拍摄的图片写入你指定的文件,不会把图片数据塞进返回的Intent data里,所以onActivityResult里拿到的data自然就是null。你之前加data!=null的判断,相当于直接跳过了跳转第二个Activity的逻辑,所以才会回到第一个Activity。

那正确的处理方式应该是这样的:

1. 不用依赖返回的data,直接用你保存的mCurrentPhotoPath

既然你已经确认mCurrentPhotoPath能正常返回文件路径,那在onActivityResult里,只要resultCode是RESULT_OK,就直接用这个路径构建跳转第二个Activity的Intent即可。

2. 修正onActivityResult代码

把你的onActivityResult改成下面这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 只需要判断请求码和结果码,不用管data是否为null
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        // 构建跳转到第二个Activity的Intent
        Intent secondIntent = new Intent(this, YourSecondActivity.class);
        // 把图片路径传递过去
        secondIntent.putExtra("EXTRA_IMAGE_PATH", mCurrentPhotoPath);
        // 启动第二个Activity
        startActivity(secondIntent);
    }
}

3. 额外注意事项(避免踩坑)

  • 全局变量的持久化:如果你的Activity可能发生重建(比如屏幕旋转),要记得在onSaveInstanceState里保存mCurrentPhotoPath,否则重建后路径会丢失:
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("PHOTO_PATH", mCurrentPhotoPath);
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mCurrentPhotoPath = savedInstanceState.getString("PHOTO_PATH");
    }
    
  • Android 7.0+的Uri权限问题:如果你是用FileProvider生成的Uri来启动相机(避免FileUriExposedException),那在传递路径给第二个Activity时,直接传文件路径是没问题的;如果要传Uri,记得给第二个Activity授予临时权限:
    secondIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    
  • Android 10+的存储权限:建议用getExternalFilesDir(Environment.DIRECTORY_PICTURES)来保存图片,这个目录属于App私有存储,不需要申请WRITE_EXTERNAL_STORAGE权限,避免权限问题。

总结

你之前的核心问题是误解了相机Intent返回data的逻辑——指定EXTRA_OUTPUT后data就是空的,这是正常的。跳过data!=null的判断,直接用你自己保存的mCurrentPhotoPath传递给第二个Activity就可以解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:03