将Android应用程序数据存储在SD卡上

storing android application data on SD Card

提问人:user121196 提问时间:7/31/2009 最后编辑:Jeff Axelroduser121196 更新时间:3/7/2013 访问量:88298

问:

有没有办法将android应用程序数据存储在SD卡上而不是内部存储器中? 我知道如何将应用程序 sqlite 数据库从内部存储器传输到 SDCard,但是如果内部存储器首先变满了怎么办?大家是如何处理的?

Android 内存管理 Android-SD卡

评论


答:

10赞 haseman 7/31/2009 #1

警告:这个答案已经过时了。您应该使用 Environment.getExternalStorageDirectory() 获取 SD 卡的根路径,如下面的答案中所述。

旧答案 所以对此的评论是有道理的:

将路径添加到根目录应该会引导您的 Android 应用程序使用 SD 卡(至少它在 G1 上是这样工作的)。Android 的文件系统对象使您能够检查文件大小...因此,应该可以(如果很棘手)编写一些故障转移代码。如果内部存储器已满,此代码将调整您的根路径。/sdcard/

评论

0赞 user121196 7/31/2009
如何调整根路径?
0赞 haseman 7/31/2009
调整您正在使用的根路径。(这有点令人困惑......您无法更改 Android 的根路径)
0赞 user121196 7/31/2009
我正在使用SQLiteDatabase创建数据库,但是其构造函数的name参数不能包含路径,我怎么可能在SD卡上创建数据库?
2赞 haseman 8/1/2009
developer.android.com/reference/android/database/sqlite/......使用 openDatabase 调用。它采用路径作为第一个参数
0赞 user121196 1/19/2010
我使用的是SQLiteOpenHelper,它不采用任何路径。
2赞 Prashast 7/31/2009 #2

使用 SDCard 的问题在于,您不能可靠地假设它会在应用程序需要时始终存在。内部存储器并非如此。只要您的应用程序不依赖此数据来运行,它应该没问题。

76赞 yincrash 1/18/2010 #3

使用 Environment.getExternalStorageDirectory() 比硬编码“/sdcard”更好 并不总是确定文件夹名称是否会被这样称呼。此外,Environment 类还提供了一个 getExternalStorageState() 方法来检查外部存储是否可用。

评论

2赞 Muz 3/29/2013
这并不总是有效,因为显然三星的真实SD卡位置是。其他设备将具有不同的位置。Environment.getExternalStorageDirectory()+"/external_sd"
13赞 phreed 11/19/2010 #4

这是另一个巧妙的小技巧。 应用程序有许多方法,调用这些方法来获取路径。 具体而言,应用程序具有 getDatabasePath 方法,SQLiteOpenHelper 使用该方法构造路径。 自定义应用程序类可以重写这些方法以提供不同的路径,包括 getExternalStorageDirectory 中的路径。

外部存储是特定于应用程序的或公共的。 有一些方法分别替换了 getExternalStorageDirectory 机制 getExternalFilesDir() 和 getExternalStoragePublicDirectory()。

3赞 Loris Albanese 12/17/2010 #5

某些设备使用 /mnt/sdcard 作为 SD 卡的根点。

33赞 Rabih harb 4/27/2011 #6

开始:

根据型号/操作系统,您可以通过以下方式访问 SD 卡根目录:

File externalStorage = Environment.getExternalStorageDirectory();

这将指内部 sd 存储或内部 sd 存储器。

externalStorage.getAbsolutePath() 

将返回以下值之一

“/sdcard/”或“/mnt/sdcard/”

要访问通常从手机/平板电脑外部插入的外部 sd 存储器或 micro SD,您必须使用 android 创建的以下文件夹之一指向外部存储器:

"/mnt/sdcard/sd" 
"/mnt/sdcard/external_sd"

"/sdcard/external_sd"
"/sdcard/sd" 

"/mnt/sdcard/"

PS:您可以注意到一个空文件夹或内部SD卡external_sdsd

内存,此文件夹是空的,用于指向外部 micro SD 卡。

最后,确保您对 Android 清单 XML 中的 SD 卡具有读/写访问权限。android.permission.WRITE_EXTERNAL_STORAGE

最后,您必须指定文件名和准备好的

private SQLiteDatabase DB = null;

private static final String DATABASE_NAME = "MyDb.db"; 
////////////
File sdcard = Environment.getExternalStorageDirectory();

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + DATABASE_NAME;

DB = SQLiteDatabase.openDatabase(dbfile, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);
///////////

你准备好了......

评论

2赞 Snicolas 10/3/2011
不幸的是,这绝对不是标准的。在 LG Optimus 上,它位于 /mnt/sdcard/_ExternalSD 中。我希望谷歌的某个人会审查所有这些。媒体的命名非常糟糕(外部???),并且文档没有说明如何在内置时访问第二张SD卡。
0赞 Sumit Sharma 12/13/2012
您能否帮助获取SD卡中存在的所有文件夹名称。