我有一个保存从服务器下载的文件的应用程序。这些文件不是我的应用程序的私有文件,也应该可以被其他应用程序访问。我想知道当SD卡不在时,保存这些文件的正确路径是什么。对于SD卡,有众所周知的API -
getExternalStorageDirectory()
对于应用程序内部内存中的私有数据,有-
Context.getFilesDir()
在某些设备上,内部存储器由/emmc/表示。
如果有人能详细说明/emmc/,那就太有帮助了。我知道它代表嵌入式存储卡,并不是所有的设备都存在。但它真的能代表内部记忆吗?还是第三段记忆?
我应该用openFileOutput()
和MODE_WORLD_READABLE
保存文件吗?
我知道这是一个古老的问题,有一个公认的答案,但我认为这个问题仍然是相关的,有一种方法可以实现提问者想要的。
转述一下,我相信询问者想要保存文件,并使其可以被其他应用程序访问(例如查看),而不必考虑外部存储(例如额外的权限和外部存储不存在的可能性)。
原来你可以让你自己的文件被其他应用程序读取。
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"的子目录,并把你的文件放在那里。
在某些设备上,内部存储器由/emmc/表示。
/emmc/
可能存在于某些设备上,并且它可能是内部的,但它可能无法访问应用程序,并且它当然不是Android SDK的一部分,除非碰巧是getExternalStorageDirectory()
返回的。
号但是它真的代表了内部内存吗?
还是第三段记忆?
询问你的设备制造商。
我应该使用openFileOutput()与MODE_WORLD_READABLE保存文件吗?
那是不可能抽象地回答的。您说您的文件"也应该可以被其他应用程序访问",但是您没有说明为什么您希望任何其他应用程序关心您的文件。其他应用程序不会扫描您的目录中的文件——它们最多允许用户浏览外部存储。有一个文件是MODE_WORLD_READABLE
的唯一原因是如果你的应用程序将触发另一个应用程序对该文件做一些事情(例如,ACTION_VIEW
Intent
)。