ContentResolver.openAssetFileDescriptor引发java.io.FileNotFoundException:content:// media / external / audio / media没有条目

时间:2019-06-26 03:23:18

标签: android mediastore

我正在更新我的应用程序以使用正确的基于uri的文件IO,并且遇到了从Android的MediaStore获得的uri的一些问题。

基本上,我的应用允许用户从媒体商店中选择歌曲。然后,我打开该文件的只读AssetFileDescriptor,然后用它来读取该文件。在大多数情况下,它都能正常工作。但是,我仍然收到大量来自用户的崩溃报告。它在此行上引发异常:

AssetFileDescriptor des = contentResolver.openAssetFileDescriptor(uri, "r");

堆栈跟踪如下:

java.io.FileNotFoundException: No entry for content://media/external/audio/media/[ID]
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:144)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:698)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1473)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1310)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1233)

我确信uri是有效的,因为它是直接从MediaStore中提取的。似乎例外情况是说uri没有指向任何文件,但令人困惑的是,如果没有任何文件支持,则MediaStore中的该条目存在的原因。

我已经搜索并发现很少与No entry for content消息相关的文档。 (通常是随机的SO问题,很少有有用的回答。)如果有人能解释为什么会这样,我将不胜感激。

如果无法解决,那么有没有办法我可以确定哪些MediaStore条目在不打开文件的情况下不会被文件支持?如果无法通过应用打开这些歌曲,甚至无法向用户显示这些歌曲,似乎是一个糟糕的UX。

谢谢。

0 个答案:

没有答案