2012-10-04 90 views
2

我正在开发一款简单的应用程序,该应用程序应能够访问内部存储器以及Micro SD卡(用户插入SD卡时)等外部存储(可移动卡)中的文件。如何检查SD卡是否已插入平板电脑:Android?

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

是否有可能发现如果用户插入了SD卡的设备? 如果是,是否有可能获得该SD卡的路径?

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

任何帮助,非常感谢。 谢谢。

回答

10

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

+0

感谢您的快速回复。 我们可以编程的方式将文件写入这些外部可移动设备吗? 另外我们怎样才能得到这张SD卡的路径? – Aadi

+0

你可以使用Environment.getExternalStorageDirectory()获取SDCard路径。但是,如果您在装有可移动(SDCard)和不可移动(内置外部存储器)的设备(例如银河SII或Tab中)中运行相同的设备,则它只会提供内置路径。 –

5

尝试:

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

感谢您的快速回复! 我们可以得到这张SD卡的路径吗? – Aadi

+1

@CodeFinder你可以为了得到所有的外部存储组件的路径和状态使用ContextCompat,与EnvironmentCompat在一起。 –

0

我要去你在这里展示的最简单的解决方案。如果你想显示SD卡是否插入或没有,然后就试图找到外部SD卡路径的文件,代码是在这里:

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(); 
     } 
0

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