我正在寻找一种在以下场景中运行的应用程序之间共享文件的方法:
- 在我们的应用程序中,有一个文件列表。用户单击"共享"按钮,我们会向他显示选择对话框,其中显示可以获取该文件的应用程序列表。例如,用户可以选择Gmail,创建信件并将其附加到选定的信件文件中,或者用户可以通过蓝牙传输文件
- 该文件可以在我们应用程序的私人目录中
- 文件可以位于文件系统中的任何位置,但需要root访问权限的目录除外
- 接收文件的应用程序可能没有
READ_EXTERNAL_STORAGE
权限 - 它应该从API 14级开始工作,直到最新版本
据我所知,满足所有条件的唯一方法是在我的应用程序中实现自定义ContentProvider
或FileProvider
。ContentProvider
将给出文件的内容URI,我们将该URI与FLAG_GRANT_READ_URI_PERMISSION
一起附加到ACTION_SHARE
Intent。
我担心我错过了其他一些简单而干净的解决方案。是否存在ContentProvider的其他可靠替代方案,如果存在,它是什么?
因此,我在FileProvider
中发现了一个未记录的功能,它允许您从设备上的任何位置共享文件。它是root-path
元素:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path name="my_root"/>
</paths>
使用root-path
时,FileProvider
完全符合我的所有要求。实现只需要十几行代码,FileProvider
是一个很好的组件。