如何检查SD卡是否已插入平板电脑:Android?

我正在开发一个简单的应用程序,它应该能够从内部存储器以及外部存储器(可移动卡)访问文件,如Micro SD卡(当用户插入SDCARD时)。

(不是设备附带的内部SD卡,我知道可以使用Environment.getExternalStorageDirectory()访问它)

是否可以确定用户是否已将sdcard插入设备? 如果是,是否有可能获得SD卡的路径?

我发现硬编码路径不是一个好的选择,因为不同的设备有不同的用户插入的SD卡路径。

很感谢任何forms的帮助。 谢谢。

(不是设备附带的内部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

尝试:

 Boolean mSDcheck = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 

我将在这里向您展示最简单的解决方案。 如果你想显示是否插入了sdcard,那么只需尝试查找外部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(); } 

“外部存储”不一定是SD卡,但可以安装内部存储器。 在许多具有SD卡的新时代Android设备上的方法getExternalStorageState()检查内部存储器但不检查SD卡。 更简单的选择是在Context类中使用getExternalMediaDirs() 方法 。 它返回一个具有绝对路径的文件数组,可用于检测SD卡的存在。