31

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

4

6 回答 6

76

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

于 2010-01-17T20:40:22.780 回答
33

开始:

根据型号/操作系统,您可以使用以下命令访问 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:您可以注意到一个空文件夹external_sdsd内部sdcard

内存,这个文件夹是空的,它用来指向外部的micro sd卡。

最后确保您android.permission.WRITE_EXTERNAL_STORAGE对 android manifest xml 中的 sd 卡具有读/写访问权限。

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

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);
///////////

你准备好了...

于 2011-04-26T16:59:45.790 回答
13

这是另一个巧妙的小技巧。应用程序有许多方法被调用来获取路径。特别是应用程序具有方法getDatabasePathSQLiteOpenHelper使用该方法来构造路径。自定义应用程序类可以覆盖这些方法以提供不同的路径,包括getExternalStorageDirectory中的路径。

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

于 2010-11-18T17:49:12.123 回答
10

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

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

将您的路径添加/sdcard/到根目录应该会指示您的 Android 应用程序使用 SD 卡(至少它与 G1 以这种方式工作)。Android 的文件系统对象使您能够检查文件大小......所以应该可以(如果棘手)编写一些故障转移代码。如果内存已满,此代码将调整您的根路径。

于 2009-07-30T21:42:26.590 回答
3

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

于 2010-12-16T17:07:49.937 回答
2

使用 SDCard 的问题是您不能可靠地假设它会在您的应用程序需要它时始终存在。内部存储器不是这种情况。只要您的应用程序不依赖这些数据来运行它应该没问题。

于 2009-07-31T02:56:10.237 回答