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