4

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

(不是设备自带的内部sdcard,我知道可以使用访问 Environment.getExternalStorageDirectory()

是否可以查明用户是否在设备中插入了 SD 卡?如果是,是否可以获得该 SD 卡的路径?

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

很感谢任何形式的帮助。谢谢你。

4

4 回答 4

12

(不是设备附带的内部 sdcard,我知道可以使用 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

于 2012-10-04T07:09:23.917 回答
6

尝试:

Boolean mSDcheck = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
于 2012-10-04T07:00:26.497 回答
0

我将在这里向您展示最简单的解决方案。如果要显示是否插入了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();
         }
于 2015-08-03T15:39:35.420 回答
0

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

于 2017-09-12T16:24:48.890 回答