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

Android相机拍摄图片无法加载至ImageView问题求助

解决Android相机拍照后FileNotFoundException问题

问题分析

你遇到的java.io.FileNotFoundException: /external_files/Pictures/DeKa/image.jpg错误,核心原因有两个:

  • FileProvider生成的fileUri是虚拟路径,BitmapFactory.decodeFile()无法直接识别这个路径,它只能读取真实的文件系统路径。
  • selectImage()中调用onDestroy()和this.onCreate(null)会强制重建Activity,导致全局变量fileUri丢失,拍照返回后无法正确定位文件。

修复步骤

1. 移除错误的Activity重建代码

直接删除selectImage()方法里的这两行:

onDestroy();
this.onCreate(null);

这两行完全没必要,会破坏Activity的正常生命周期,导致变量状态丢失。

2. 保存并恢复fileUri,避免Activity重建丢失

将fileUri设为全局变量,并重写onSaveInstanceState和onRestoreInstanceState方法,确保Activity重建后能恢复fileUri:

private Uri fileUri;

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable("saved_file_uri", fileUri);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    fileUri = savedInstanceState.getParcelable("saved_file_uri");
}

3. 正确读取FileProvider对应的图片

替换onActivityResult中相机部分的读取逻辑,通过ContentResolver打开输入流读取图片,而不是直接用文件路径:

if (requestCode == REQUEST_CAMERA) {
    try {
        InputStream inputStream = getContentResolver().openInputStream(fileUri);
        bitmap = BitmapFactory.decodeStream(inputStream);
        setToImageView(getResizedBitmap(bitmap, max_resolution_image));
        
        if (inputStream != null) {
            inputStream.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4. 优化文件命名与权限检查

  • 避免文件名重复覆盖:修改getOutputMediaFile()中的文件名,加入时间戳:
File mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
  • 权限验证:确保在AndroidManifest.xml中声明必要权限,且在运行时动态申请:
<!-- Android 10及以下 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Android 13+ -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:32:40