安卓 - 当应用程序安装在SD卡上时,内部存储与外部存储的区别

12

我有一个应用程序下载大量内容(用户之间存在差异,但可能为 200mb 到 1GB 或更多)。

目前,我将所有此内容保存在外部存储器中,因为这可能是最具空间的区域,例如 SD 卡。这对大部分情况来说都很好用,但情况并非总是如此理想。

如果设备具有内置的外部存储器(如大多数平板电脑),但也有 SD 卡插槽,则外部存储问题会变得有点复杂。应用程序可以安装到 SD 卡上,但内容将保存在内置存储器中,而不是外部 SD 卡中。

如果应用程序安装在 SD 卡上,调用getFilesDir() 会给出 SD 卡上的路径还是内部存储器上的路径?

最佳处理方式是什么?我应该将内容保存到内部存储器(在 SD 卡上),还是外部存储器上,或者在启动应用程序时询问用户是最好的方法?

2个回答

7

该应用程序可以安装在SD卡上,但内容将保存在内置存储器中,而不是外部SD卡。

不是这样的。如果设备具有外部存储,则应用将安装到外部存储。无论设备是否还具有SD卡都无关紧要。

如果应用程序安装在SD卡上,调用getFilesDir()会给出SD卡上的路径还是内部存储器中的路径?

getFilesDir()始终为内部存储器,无论应用程序安装在何处。


不是的。如果设备有外部存储,应用程序将安装到外部存储中。无论设备是否还有SD卡都没有关系。那么你的意思是,如果设备还有内置的外部存储,应用程序就不能安装在SD卡上? - David Scott
@DavidScott:不,我的意思是Andrdoid没有“安装在SD卡上”的概念。它确实有一个“安装在外部存储器上”的概念——“外部存储器”是否为SD卡取决于设备制造商。http://developer.android.com/guide/appendix/install-location.html - CommonsWare
好的,我认为正在发生的是,人们正在使用Apps2SD将应用程序从内置外部存储器移动到SD卡中。感谢澄清。 - David Scott

1
如果应用程序安装在SD卡上,调用getFilesDir()方法会返回SD卡上的路径还是内部存储器上的路径?
不会。Context类中的getFilesDir()方法始终返回内部存储器(在Android术语中)的路径。
在大多数情况下,getFilesDir()返回的目录路径将是/data/data/your.application.package.appname/files。但是在不同的手机和不同的Android版本上可能会有所不同。
要将应用程序文件存储在SD卡中,可以使用Context类中的File[] getExternalFilesDirs(String type)方法。通常,第二个返回的路径将是microSD卡的存储路径(如果有的话)。
在我的手机上,通过将null作为getExternalFilesDirs(String type)参数传递后,第二个返回的路径为/storage/sdcard1/Android/data/your.application.package.appname/files。
根据Google/官方Android文档,内部和外部存储器术语与我们的理解相当不同

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接