找到Android的SD卡路径

时间:2014-09-05 16:02:37

标签: android

我的手机的SD卡路径名为" / storage / external_SD"

但我听到不同的手机制造商以不同方式命名他们的路径。像SD_card,externalMemory等..

我正在开发一个应用程序,在打开文件追踪器时打开SD卡内容。

当不同品牌以不同方式命名其SD卡路径时,如何设置开启路径?

3 个答案:

答案 0 :(得分:1)

getExternalStorageDirectory ()将为您提供(通常)SD卡的路径,因此您可以在代码中使用此功能。

答案 1 :(得分:1)

您正在寻找Environment类及其静态方法getExternalStorageDirectory

  

返回主外部存储目录   ...
  在具有多个"外部"的设备中存储目录,这个目录代表了   "主"用户将与之交互的外部存储。进入   二级存储可通过

获得

答案 2 :(得分:1)

是。不同厂商使用不同的SD卡名称,如三星Tab 3中的extsd,以及其他三星设备使用sdcard这样不同的厂商使用不同的名称。

我和你有同样的要求。所以我已经从我的项目中为您创建了一个示例示例,转到此链接Android Directory chooser example,它使用了androi-dirchooser库。 此示例检测SD卡并列出所有子文件夹,它还检测设备是否有多于一张SD卡。

部分代码如下所示。完整示例转到链接 Android Directory Chooser

帮助方法

/**
* Returns the path to internal storage ex:- /storage/emulated/0
 *
* @return
 */
private String getInternalDirectoryPath() {
return Environment.getExternalStorageDirectory().getAbsolutePath();
 }

/**
 * Returns the SDcard storage path for samsung ex:- /storage/extSdCard
 *
 * @return
 */
    private String getSDcardDirectoryPath() {
    return System.getenv("SECONDARY_STORAGE");
    }

 mSdcardLayout.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            String sdCardPath;
            /***
             * Null check because user may click on already selected buton before selecting the folder
             * And mSelectedDir may contain some wrong path like when user confirm dialog and swith back again
             */

            if (mSelectedDir != null && !mSelectedDir.getAbsolutePath().contains(System.getenv("SECONDARY_STORAGE"))) {
                mCurrentInternalPath = mSelectedDir.getAbsolutePath();
            } else {
                mCurrentInternalPath = getInternalDirectoryPath();
            }
            if (mCurrentSDcardPath != null) {
                sdCardPath = mCurrentSDcardPath;
            } else {
                sdCardPath = getSDcardDirectoryPath();
            }
            //When there is only one SDcard
            if (sdCardPath != null) {
                if (!sdCardPath.contains(":")) {
                    updateButtonColor(STORAGE_EXTERNAL);
                    File dir = new File(sdCardPath);
                    changeDirectory(dir);
                } else if (sdCardPath.contains(":")) {
                    //Multiple Sdcards show root folder and remove the Internal storage from that.
                    updateButtonColor(STORAGE_EXTERNAL);
                    File dir = new File("/storage");
                    changeDirectory(dir);
                }
            } else {
                //In some unknown scenario at least we can list the root folder
                updateButtonColor(STORAGE_EXTERNAL);
                File dir = new File("/storage");
                changeDirectory(dir);
            }


        }
    });