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

Android CloudMediaProvider onOpenMedia未触发,抛出FileNotFoundException问题

自定义CloudMediaProvider无法触发onOpenMedia()的问题

我通过继承Android的CloudMediaProvider类实现了类似OneDrive的自定义云存储媒体服务,查询和预览功能正常——PhotoPicker会调用我重写的onQueryMedia()、onOpenPreview()等方法,日志输出符合预期。

但当用户选择媒体项点击“打开”(即获取全分辨率文件)时,系统完全不会调用我重写的onOpenMedia()方法,反而PhotoPicker的SelectedMediaPreloader组件抛出如下异常:

Could not open FileDescriptor for content://media/picker/0/ch.nikleberg.bettershared.cloudpicker/media/ID_1 (Ask Gemini)
java.io.FileNotFoundException: File not found for uri: content://media/picker/0/ch.nikleberg.bettershared.cloudpicker/media/ID_1
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:151)
at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:780)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2053)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1868)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1784)
at com.android.providers.media.photopicker.SelectedMediaPreloader.openFileDescriptor(SelectedMediaPreloader.java:262)
at com.android.providers.media.photopicker.SelectedMediaPreloader.-$$Nest$mopenFileDescriptor(SelectedMediaPreloader.java:0)
at com.android.providers.media.photopicker.SelectedMediaPreloader$4.run(SelectedMediaPreloader.java:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
at com.android.providers.media.photopicker.SelectedMediaPreloader$5$1.run(SelectedMediaPreloader.java:334)
SelectedMediaPreloader  com...ndroid.providers.media.module  D  openFileDescriptor() DONE, took 12 ms, content://media/picker/0/ch.nikleberg.bettershared.cloudpicker/media/ID_1
SelectedMediaPreloader  com...ndroid.providers.media.module  D  Preloaded 1 (of 1) items

已尝试的解决方案

  • 在onQueryMedia()返回的Cursor列中,云端文件原本应返回NULL的MEDIA_STORE_URI,我尝试设置为任意内容URI,但异常未改变。
  • 将CloudMediaProvider实现包装在普通ContentProvider中,并为所有可能的调用添加日志,预览功能的调用可在logcat中看到,但未发现媒体实际检索的调用(预期会调用query()或openTypedAssetFile())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:21:12