有没有办法将Android应用程序数据存储在SD卡而不是内部存储器中? 我知道如何将应用程序sqlite数据库从内部存储器传输到SDCard,但是如果内部存储器首先变满了怎么办?每个人都如何处理这个问题?
答案 0 :(得分:76)
使用Environment.getExternalStorageDirectory()比使用硬编码“/ sdcard”更好的做法 并不总是确定将调用文件夹名称。此外,Environment类提供了一个getExternalStorageState()方法来检查外部存储是否可用。
答案 1 :(得分: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:您可以在内部SD卡上看到空文件夹external_sd
或sd
内存,此文件夹为空,用于指向外部micro sd卡。
最后确保您对android manifest 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 :(得分:13)
这是另一个巧妙的小技巧。 Application有许多方法被调用来获取路径。 特别是应用程序使用getDatabasePath方法SQLiteOpenHelper来构造路径。 自定义应用程序类可以覆盖这些方法,以提供不同的路径,包括getExternalStorageDirectory中的路径。
外部存储是特定于应用程序的或公共的。 有方法,取代getExternalStorageDirectory机制, <{3}}和getExternalFilesDir()。
答案 3 :(得分:9)
警告:此答案已过时。您应该使用Environment.getExternalStorageDirectory()来获取SD卡的根路径,如下面的答案中所述。
旧答案所以对此的评论是有道理的:
将/sdcard/
添加到您的路径根目录应该指示您的Android应用程序使用SD卡(至少它与G1一起工作)。 Android的文件系统对象使您能够检查文件大小...因此应该可以(如果棘手)编写一些故障转移代码。如果内部存储器已满,此代码将调整您的根路径。
答案 4 :(得分:3)
某些设备使用/ mnt / sdcard作为SD卡的根点。
答案 5 :(得分:2)
使用SDCard的问题在于,您无法可靠地假设它总是在您的应用程序需要时出现。内部存储器不是这种情况。只要您的应用程序不依赖于此数据运行,它应该没问题。