将公共文件保存在内部存储中

时间:2011-04-23 13:56:37

标签: android file storage public internal

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

getExternalStorageDirectory()

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

Context.getFilesDir()

在某些设备上,内部存储器由/ emmc /.

表示

如果有人可以详细说明/ emmc /,那将会非常有用。我知道它代表嵌入式存储卡,并不存在于所有设备中。但它真的代表了内存吗?或者它是第三个记忆?

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

2 个答案:

答案 0 :(得分:15)

我意识到这已经过时并且已经接受了答案,但我认为问题仍然存在,并且有一种方法可以实现提问者想要的。

换句话说,我相信提问者想要保存文件,并让其他应用程序可以访问(例如查看),而不必考虑外部存储(例如额外的许可以及外部存储不是本)。

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

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”并将文件放在那里。

答案 1 :(得分:9)

  

在某些设备上,内部存储器由/ emmc /.

表示

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

  

但它真的代表了内存吗?

没有

  

或者它是第三个记忆?

询问您的设备制造商。

  

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

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