android - 在 URI 上使用 ContentResolver 时出现 ENOENT / FileNotFoundException
问题描述
错误是:
Caused by android.system.ErrnoException
open failed: ENOENT (No such file or directory)
和
Non-fatal Exception: java.io.FileNotFoundException
/storage/emulated/0/Download/File-16.ext: open failed: ENOENT (No such file or directory)
(出于隐私考虑,文件名/扩展名略有更改。)
这行代码很简单
inputStream = getContentResolver().openInputStream(data);
其中 data 是非空 URIintent.getData();
它适用于 99% 的用户,但也有不少用户默默地报告了这次崩溃。我不知道为什么?
我已经记录了一些导致这种情况的 URI,但没有看到任何模式:
- file:///storage/emulated/0/Download/File-16.ext
- file:///storage/emulated/0/Download/12APK%2BOBB.NESTV.zip
- file:///storage/emulated/0/Download/Figure%20Submission%20umdertale
- content://com.google.android.apps.searchlite.fileprovider/downloadfile/storage/emulated/0/Download/MKX-Scorpion-vs-Sub-Zero.zip
- 内容://下载/all_downloads/2249
设备/安卓版本也没有一致性。找不到任何关于此的问题,只有回答说要在 URIS 上使用 ContentResolver 的问题,在这种情况下我就是这样。
解决方案
推荐阅读
- android - RecyclerView 中 CardView 项的滚动位置
- c# - 即使禁用控件,ObjectListView 也允许垂直滚动?
- arrays - 将项目添加到角度材料表
- r - 初学者:在 R 中设置时间序列
- email - 垃圾邮件过滤器正在影响电子邮件打开率
- asynchronous - 使用 Camel 的异步非阻塞组播
- python - Sort array by specific column then sort by value of this column
- c# - 使用具有不同类型的多个对象反序列化 JSON 类
- azure - Azure DevOps - 从传入电子邮件创建工作项
- javascript - 在 overflow-x 为 auto 时设置 overflow-y 可见,以便内容可以垂直溢出父容器