我有一个应用程序可以保存从服务器下载的文件。这些文件不是我的应用程序专用的文件,也应该可供其他应用程序访问。我想知道当SD卡是空的时保存这些文件的正确路径是什么。对于SD卡,有众所周知的API -
getExternalStorageDirectory()
对于内部存储器中应用程序的私有数据,有 -
Context.getFilesDir()
在某些设备上,内部存储器由/ emmc /.
表示如果有人可以详细说明/ emmc /,那将会非常有用。我知道它代表嵌入式存储卡,并不存在于所有设备中。但它真的代表了内存吗?或者它是第三个记忆?
我应该使用openFileOutput()
使用MODE_WORLD_READABLE
保存文件吗?
答案 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
)