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

5
我正在开发一款简单的应用程序,该应用程序应该能够访问内部存储器和外部存储器(可拆卸的卡片),例如当用户插入Micro SD卡时。
(不是设备附带的内部sdcard,我知道可以使用Environment.getExternalStorageDirectory()来访问)
是否有可能找出用户是否将SD卡插入设备中?如果是,是否可能获取该SD CARD的路径?
我发现硬编码路径不是一个好的选择,因为不同的设备对于用户插入的SD卡具有不同的路径。
非常感谢您的任何帮助。谢谢。
4个回答

13

(不是设备内置的SD卡,可以使用Environment.getExternalStorageDirectory()访问)

在Android中,可移动存储介质(如SD卡)或内部(不可移动)存储都被视为外部存储。

以下内容来自developer.android.com:

每个兼容Android的设备都支持一个共享的“外部存储”,您可以使用它来保存文件。这可以是可移动存储介质(如SD卡)或内部(不可移动)存储。保存到外部存储的文件是全局可读的,并且当用户启用USB大容量存储以在计算机上传输文件时,可以进行修改。

要检查SD卡是否可用,可以使用以下代码。

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


感谢您的快速回复。 我们能否通过编程将文件写入这些外部可移动设备? 此外,我们如何获取SD卡的路径? - Adarsh H S
您可以使用Environment.getExternalStorageDirectory()获取SD卡路径。但是,如果在同时具有可拆卸式(SD卡)和不可拆卸式(内置外部存储)的设备上运行相同代码,例如在Galaxy SII或Tab中,则它将仅提供内置外部存储的路径。 - abbas.aniefa

6

尝试:

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

谢谢您的快速回复!我们能获取这个SD卡的路径吗? - Adarsh H S
1
@CodeFinder 你可以使用ContextCompat和EnvironmentCompat一起获取所有外部存储组件的路径和状态。 - android developer

0
“外部存储”不一定是指SD卡,也可以是挂载的内部存储器。在许多新型Android设备上,使用SD卡的getExternalStorageState()方法检查的是内部存储器而非SD卡。 更简单的方法是使用Context类中的getExternalMediaDirs()method。它返回一个带有绝对路径的文件数组,可用于检测SD卡的存在。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接