2012-09-12 68 views
2

如何获取我的应用程序可以保存大型JPG文件的文件夹的路径?只有SD卡存在时,getExternalStorageDirectory()才能正常工作,但SD删除或硬件没有SD卡插槽时会发生什么情况。 谢谢将文件保存在闪存中

+0

要澄清,当我在我的标签中删除SD时,我仍然可以保存JPG,但我必须使用(手动)路径“mnt/flash”。在我的HTC One S(没有SD卡插槽)中,我必须使用“mnt/sdcard”,我也手动找到路径,有没有办法自动为不同的配置文件做这些? – user1662779

回答

0

您可以要求外部目录存在,或者您可以存储到内部目录。如果您选择同时允许,我建议您在内部空间中存储标志以表明您已在外部存储了某些内容,以便如果外部存储不存在,您可以采取适当的措施。

0

由于您正在保存大型JPG文件,因此最好将其保存在外部存储器中,因为手机的内部存储器非常小,并且都会影响手机的性能。

1

您可以使用Context的getFilesDir()方法。从上下文中,您还可以使用方法来获取缓存目录,外部缓存目录和外部文件目录。一个Activity也是一个上下文,所以你可以在一个里面使用这些方法。

getFilesDir()方法为您提供文件只能从应用程序访问的文件夹,并且始终可用。但是,如果可能,应该使用缓存目录。这样你就可以避免使系统空间不足。

编辑:

我的回答:几乎总是一个设备要么有一个SD卡或内置外接存储。当它是内置的,它仍然被称为外部存储。要检查外部存储是否可移动(SD卡)或内置,您可以在环境中使用isExternalStorageRemovable()。 基本上,你不应该把大文件放在内存上。 内部存储器中没有公用文件夹。如果设备没有外部存储器,它根本无法做某些事情。就那么简单。所以当没有外部存储器时,你有一个选择是告诉用户它并要求他们插入一张卡。您不必处理这种情况,让用户处理它。

你问答案:尝试使用getDir(String name, int mode)和/或上下文对象的openFileOutput(String name, int mode),以及模式使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE。另请检查Using the Internal Storage

您正面临着为了每个人的利益而存在的平台限制。

+0

嗨,我希望这些JPGS可以从其他应用程序(主要是图片库)访问。我认为getFilesDir()不是我的问题的解决方案,因为我想将JPGS保存在与标准相机使用相同的文件夹(或类似文件)中(DCIM)。谢谢 – user1662779

+0

Android有意设计为不允许这样做,这是有原因的。很抱歉地说出来,但看起来你的应用程序应该要么需要外部存储,要么在没有外部存储时提供有限的功能。检查我的帖子中的编辑。 – Stan