首页 > 解决方案 > 在Android中打开位图时FileNotFound

问题描述

我收到以下异常

java.io.FileNotFoundException: No content provider: /my_images/IMG_20210611_171332_9015407964570520530.jpg 
at android.conten...

对于这行代码

Bitmap bitmap = android.provider.MediaStore.Images.Media.getBitmap(context.getContentResolver(), fileUri);

不幸的是,我没有完整的堆栈跟踪,因为我用于记录的 AppCenter 正在截断消息。

我正在运行此代码以响应我们从手机的默认相机应用程序返回到此应用程序的活动结果。

我们在一小部分情况下会收到此错误,而不是在所有经过测试的手机上。

即使错误显示 FileNotFoundException,是否有可能是由于读取图片时 RAM 不足引起的?

附加信息 传递给 ACTION_IMAGE_CAPTURE 意图的图像文件名是这样生成的:

File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName,  ".jpg", storageDir);
Uri fileUri = FileProvider.getUriForFile(activity, "com.mycompany.myapp.saveimageprovider", image);

标签: androidandroid-contentprovider

解决方案


发生这种情况有两个原因:

重新创建活动

当在某些(主要是三星)手机上以横向模式拍摄照片时,当从相机返回并运行 onCreate 时,应用程序被重新创建。

文件 uri 存储错误

当我的本地字段存储在 onSaveInstanceState 中时,我使用 fileUri.getPath() 来存储发送到相机的照片 uri。不幸的是 getPath() 只返回

/my_images/IMG_20210614_205615_6745415510162969966.jpg

应该是的整个路径

内容://com.mycompany.myapp.saveimageprovider/my_images/IMG_20210614_205615_6745415510162969966.jpg

在 onSaveInstanceState 中使用 fileUri.tostring 后,一切都开始工作了。


推荐阅读