如何使用ACTION_OPEN_DOCUMENT显示更多提供者

cgo*_*lin 11 android android-contentprovider

我想使用作为Storage Access Framework一部分提供的android系统对话框来打开文件.我这样做

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(intent, EDIT_REQUEST);
Run Code Online (Sandbox Code Playgroud)

然后处理返回的URI onActivityResult().

问题是,在结果菜单中,我得到的内容提供商远远少于我的预期.仅限Google云端硬盘和下载(请参阅下面的左侧屏幕截图).其他人,如Dropbox,Solid Explorer,......都没有显示.

我怀疑原因是这些应用程序根本没有设置必要的intent过滤器显示在此列表中.

但是,其他应用程序(例如Kaiten Mail或Chrome)以某种方式设法显示系统对话框,其中包含完全实现的内容提供程序,位于列表顶部,然后其他应用程序(如Dropbox和Solid Explorer)在下方用细条分隔(请参阅正确的屏幕截图).

我怎么能得到这种行为?

比较我得到的行为(左)和我想要的行为(右)

小智 2

使用“ACTION_GET_CONTENT:

Intent intent = new Intent(Intent. ACTION_GET_CONTENT);
intent.setType("application/pdf");
startActivityForResult(intent, EDIT_REQUEST);
Run Code Online (Sandbox Code Playgroud)