android - ContentResolver openInputStream() 在现有文件上抛出 FileNotFound

标签 android android-contentresolver

我有这个看似简单的代码

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File testfile = new File(path,"image.jpg");

Log.d(TAG,"testfile: " + testfile + " exists: " + testfile.exists());

Uri uri = Uri.fromFile(testfile);
ContentResolver cr = context.getContentResolver();
InputStream istr = cr.openInputStream(uri);

输出是:

testfile: /storage/emulated/0/Pictures/image.jpg exists: true

uri 值为 file:///storage/emulated/0/Pictures/image.jpg。看起来像同一个文件,但 openInputStream() 抛出 FileNotFoundException。

知道为什么吗?这是在 Android 6.0.1 上。

最佳答案

将此权限添加到您的 AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

当targetSdkVersion为23或以上(Android 6)时,将其放在AndroidManifest.xml中是不够的,您必须在运行时请求权限。

关于android - ContentResolver openInputStream() 在现有文件上抛出 FileNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829963/

相关文章:

java - 如何在警报对话框中将标题和正/负按钮设为黑色

android - 无法解析内容 ://com. android.alarmclock/alarm 的提供商

java - 我如何获得两个日期之间的天数,包括时间?

java - 动态添加 View 并调整父 ViewGroup 的大小

android - java.lang.IllegalArgumentException 在 Android 10 设备中找不到卷 external_primary

android - 如何通过 ContentResolver 调用 ContentProvider 中的自定义方法,然后访问 Bundle?

android - 无法从文件 ://path in Picasso 加载图像

android - 权限拒绝在应用重启时访问图片 URI

android - 我可以使用 phoneGap 部署到多平台吗?

android - 使用 Activity 上下文观察 fragment 中的实时数据对象?