Android - 如何保存其他应用程序可以读取的文件?

Posted

技术标签:

【中文标题】Android - 如何保存其他应用程序可以读取的文件?【英文标题】:Android - How do I save a file that is readable by an other app? 【发布时间】:2011-12-04 08:38:06 【问题描述】:

我想保存一个文件,然后向其他应用程序发出一个意图以打开该文件。我该如何做到这一点?

如果尝试过:openFileOutput("file.pdf", Context.MODE_WORLD_READABLE) 但似乎不起作用。我应该将文件保存在应用程序文件夹之外吗?如果是这样,我该如何传递正确的权限?

【问题讨论】:

【参考方案1】:

你可以这样使用:

String extPath = Environment.getExternalStorageDirectory().getAbsolutePath();
String pathPrefix = extPath + "/android/data/" + APP_PACKAGE_ID + "/cache/";

将文件保存到所有其他应用程序都可以访问的 sd 卡。模式Context.MODE_WORLD_READABLE 就足够了。该代码用于 android 2.1,并使用建议的路径在 sd 卡上存储应用程序相关数据。从 Android 2.2 开始,如果卸载应用,此目录会自动删除。

您的应用需要安装到 sd 卡的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

使用具有全球可读权限的openFileOutput(...) 有点没用,因为这些文件存储在一个只能由应用程序本身访问的文件夹中。

更多信息在data storage documentation 中描述。

请注意,如果用户通过 USB 连接设备进行文件存储访问,则外部存储器可能不可用。您应该始终首先通过String state = Environment.getExternalStorageState(); 检查这种情况。

【讨论】:

感谢您的快速回答,但是当我不使用openFileOutput 时,如何将文件标记为Context.MODE_WORL_READABLE? android 文档让我有点不知所措,因为所有 Stream 类都不接受它作为参数。我一定是在这里遗漏了什么...... 对不起,我的错:sd卡没有访问权限,你存储的数据总是世界可写的。 没有SD卡的时候权限怎么办? 我的整个建议需要一个外部存储目录,它通常是一个 sd 卡,但在具有大内部存储的设备上,“外部存储目录”可能只是映射到这个,但是关于权限,还有一切文字可写。 截至我发表评论时,Context.MODE_WORLD_READABLE 现已弃用。还有其他安全的方法吗? ***.com/questions/13856757/…

以上是关于Android - 如何保存其他应用程序可以读取的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Android笔记:AlbumSaver图片视频保存工具类

android怎么用流 读取云端图片

Android:如何在应用程序执行其他工作时连续保存传感器数据

在 Android 应用程序中读取对象时出现 EOFException

android开发: EditText中插入的相册图片如何保存在数据库里,查看的时候又如何读取?

如何将图像保存和读取为文本,嵌入在代码中