use*_*196 30 android memory-management android-sdcard
有没有办法将Android应用程序数据存储在SD卡而不是内部存储器中?我知道如何将应用程序sqlite数据库从内部存储器传输到SDCard,但是如果内部存储器首先变满了怎么办?每个人如何处理这个?
yin*_*ash 76
使用Environment.getExternalStorageDirectory()比使用硬编码"/ sdcard" 更好的做法.并不总是确定将调用文件夹名称.此外,Environment类提供了一个getExternalStorageState()方法来检查外部存储是否可用.
Rab*_*arb 33
开始:
根据型号/操作系统,您可以使用以下命令访问SD卡根目录:
File externalStorage = Environment.getExternalStorageDirectory();
Run Code Online (Sandbox Code Playgroud)
这将引用内部sd存储或内部sd内存.
externalStorage.getAbsolutePath()
Run Code Online (Sandbox Code Playgroud)
将返回以下值之一
"/ sdcard /"或"/ mnt/sdcard /"
要访问通常从手机/平板电脑外部插入的外部SD内存或micro SD,您必须使用android创建的以下文件夹之一指向外部内存:
"/mnt/sdcard/sd"
"/mnt/sdcard/external_sd"
"/sdcard/external_sd"
"/sdcard/sd"
"/mnt/sdcard/"
Run Code Online (Sandbox Code Playgroud)
ps:您可以注意到一个空文件夹external_sd或sd内部SD卡
内存,此文件夹为空,用于指向外部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);
///////////
Run Code Online (Sandbox Code Playgroud)
你准备好了......
phr*_*eed 13
这是另一个巧妙的小技巧.的应用有许多这是所谓的获取路径的方法.特别是应用程序具有getDatabasePath方法,由SQLiteOpenHelper用于构造路径.自定义应用程序类可以覆盖这些方法,以提供不同的路径,包括getExternalStorageDirectory中的路径.
外部存储是特定于应用程序的或公共的.有方法,分别替换getExternalStorageDirectory机制, getExternalFilesDir()和getExternalStoragePublicDirectory().
警告:这个答案已经过时了.您应该使用Environment.getExternalStorageDirectory()来获取SD卡的根路径,如下面的答案中所述.
旧答案所以对此的评论是有道理的:
添加/sdcard/到根目录的路径应该指示您的Android应用程序使用SD卡(至少它与G1一起工作).Android的文件系统对象使您能够检查文件大小...因此应该可以(如果有点棘手)编写一些故障转移代码.如果内部存储器已满,此代码将调整您的根路径.