我正在开发一个简单的应用程序,它应该能够从内部存储器以及外部存储器(可移动卡)访问文件,如Micro SD卡(当用户插入SD卡时)。
(不是设备附带的内部SD卡,我知道可以使用它访问它
Environment.getExternalStorageDirectory()
)
是否可以确定用户是否已将SD卡插入设备? 如果是,是否有可能获得SD卡的路径?
我发现对路径进行硬编码不是一个好的选择,因为不同的设备有不同的用户插入的SD卡路径。
非常感谢任何帮助。 谢谢。
答案 0 :(得分:11)
(不是设备附带的内部SD卡,我知道它可以 使用Environment.getExternalStorageDirectory())
访问
Android认为可移动存储介质(例如SD卡)或内部(不可移动)存储仅作为外部存储。
以下是表单developer.android.com
每个Android兼容设备都支持共享的“外部存储” 您可以用来保存文件。这可以是可移动存储介质 (例如SD卡)或内部(不可移动)存储。档 保存到外部存储器是世界可读的,可以修改 当用户启用USB海量存储来传输文件时 计算机。
要检查SDCard可用性,您可以使用以下代码。
private boolean isExternalStorageAvailable() {
String state = Environment.getExternalStorageState();
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// We can only read the media
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// Something else is wrong. It may be one of many other states, but
// all we need
// to know is we can neither read nor write
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
if (mExternalStorageAvailable == true
&& mExternalStorageWriteable == true) {
return true;
} else {
return false;
}
}
请阅读http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
答案 1 :(得分:6)
尝试:
Boolean mSDcheck = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
答案 2 :(得分:0)
我将在这里向您展示最简单的解决方案。如果你想显示是否插入了SD卡,那么只需尝试找到外部sdcard路径的文件,代码在这里:
File file = new File("/mnt/extSdCard");
try
{
File list[] = file.listFiles();
Toast.makeText(getApplicationContext(), "Yes sdcard is mounted, file count "+list.length, Toast.LENGTH_LONG).show();
}
catch(NullPointerException o)
{
Toast.makeText(getApplicationContext(), "Sorry no sdcard is mounted:", Toast.LENGTH_LONG).show();
}
答案 3 :(得分:0)
"外部存储"不一定是SD卡,但可以安装内部存储器。许多具有SD卡的新时代Android设备上的方法getExternalStorageState()
检查内部内存但不检查SD卡。
更简单的选择是在Context类中使用getExternalMediaDirs()
method。它返回一个带绝对路径的文件数组,可用于检测SD卡的存在。