14

我有一个应用程序可以保存从服务器下载的文件。这些文件不是我的应用程序私有的,其他应用程序也应该可以访问这些文件。我想知道当 SD 卡不存在时保存这些文件的正确路径是什么。对于 SD 卡,有众所周知的 API -

getExternalStorageDirectory()

对于内部存储器中的应用程序私有数据,有 -

Context.getFilesDir()

在某些设备上,内部存储器由 /emmc/ 表示。

如果有人能详细说明/emmc/,那将非常有帮助。我知道它代表嵌入式存储卡,并不存在于所有设备中。但它真的代表内部记忆吗?还是第三记忆?

openFileOutput()我应该使用with保存文件MODE_WORLD_READABLE吗?

4

2 回答 2

16

我意识到这是旧的并且有一个公认的答案,但我认为这个问题仍然是相关的,并且有一种方法可以实现提问者想要的。

换句话说,我相信提问者想要保存一个文件,并使其可以被其他应用程序访问(例如查看),而不必考虑外部存储(例如额外的权限和外部存储不存在的可能性)。

事实证明,您可以让其他应用程序读取您自己的文件。

File file = new File( ctx.getCacheDir(), "picture" );               
...
file.setReadable( true, false );
  // makes file readable to other apps

// Get another app to view my picture
Uri uri = Uri.fromFile(file);          
Intent intent = new Intent( Intent.ACTION_VIEW );
intent.setDataAndType( uri, "image/*" );
ctx.startActivity( intent );

setReadable 使上面的代码对我有用 - 如果没有该行,查看器应用程序将无法读取文件。请注意,setReadable 对整个目录进行操作,因此最好的解决方案可能是创建一个名为“public”的子目录并将您的文件放在那里。

于 2013-05-30T21:29:17.000 回答
8

在某些设备上,内部存储器由 /emmc/ 表示。

/emmc/可能存在于某些设备上,它可能是内部的,但应用程序可能无法访问它,并且它肯定不是 Android SDK 的一部分,除非它恰好getExternalStorageDirectory()返回。

但它真的代表内部记忆吗?

不。

还是第三记忆?

询问您的设备制造商。

我应该使用带有 MODE_WORLD_READABLE 的 openFileOutput() 保存文件吗?

这是不可能抽象地回答的。您说您的文件“也应该可供其他应用程序访问”,但您没有说明为什么您希望任何其他应用程序关心您的文件。其他应用程序不会扫描您的目录中的文件——充其量,它们将允许用户浏览外部存储。拥有文件的唯一原因MODE_WORLD_READABLE是如果您的应用程序将触发另一个应用程序对该文件执行某些操作(例如,ACTION_VIEW Intent)。

于 2011-04-23T14:21:48.560 回答