在 Android 应用程序之间共享文件? [关闭]
Posted
技术标签:
【中文标题】在 Android 应用程序之间共享文件? [关闭]【英文标题】:Sharing files between android apps? [closed] 【发布时间】:2013-08-23 18:01:57 【问题描述】:谁能建议我们如何在 n 个 android 应用程序之间共享文件?建议我任何链接,代码等?提前致谢!!
【问题讨论】:
使用内容提供者在您的 n 个 Android 应用程序之间共享 SQLite 数据库等数据。 使用Environment.getExternalStoragePublicDirectory("")
调用获取公共目录路径。
【参考方案1】:
查看 android.support.v4.content.FileProvider。该组件可以通过 content URI 将文件从一个应用程序共享到系统中的任何其他应用程序,这允许托管应用程序使用 URI(不仅仅是文件)权限来控制文件。这意味着托管应用可以设置临时访问权限,而不是永久更改文件的权限。没有性能损失,因此每次应用程序需要文件时,它都可以获得内容 URI 和临时权限。非常安全。
FileProvider 是 ContentProvider 的子类,工作方式大致相同。
当前的参考文档有点模糊。我试着总结一下:
托管应用需要在清单中声明提供者:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities=authority
android:exported="false"
android:grantUriPermissions="true">
<meta-data>
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/some_name" />
</provider>
“authority”是你自己编的一个 URI 权限。
some_name 是您放入项目中的 XML 文件的名称(通常在 xml/
子目录中。
some_name.xml
的内容是
<paths>
<files-path name="path-segment" path="filepath"/>
...
</paths
文件路径
在您的私有文件区域共享文件(由 Context.getFilesDir() 返回的值),但您也可以在您的外部区域和缓存区域共享文件。
filepath
是您私人文件区域中的子目录,例如images/
。 path-segment
是进入内容 URI 的相应路径。例如,如果您使用的权限为
com.example.myapp.fileprovider
放入
<files-path name="images" path="images/">
然后生成的内容 URI 以
开头content://com.example.myapp.fileprovider/images
如果要共享文件 images/myimage.jpg,则生成的内容 URI 为
content://com.example.myapp.fileprovider/images/myimage.jpg
托管应用通过调用`FileProvider.getUriForFile() 生成内容URI
很好的是,您不必在代码中实现 FileProvider 的子类;它的默认行为足以满足大多数人的需求。
有关更多信息,请参阅 javadoc。
【讨论】:
【参考方案2】:所有应用程序都必须知道文件名。将文件保存到 SD 卡或内部存储器并确保它是公开的。看看这个主题的 Android 开发者网站:http://developer.android.com/training/basics/data-storage/files.html
我希望这会有所帮助。
【讨论】:
以上是关于在 Android 应用程序之间共享文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
android 7.0 关闭严格模式绕过fileprovider共享文件的限制