Как получить путь SdCard в Android?

Мне нужен путь SdCard для сохранения в нем файлов. Я пробовал некоторые коды, но они не работали на некоторых устройствах или версиях Android. Теперь мне нужен код/путь, который получает путь SdCard для всех устройств и всех версий Android.


person Raptor    schedule 31.10.2018    source источник
comment
Я искал в Google и переполнении стека, но не нашел ответа.   -  person Raptor    schedule 01.11.2018


Ответы (3)


Чтобы получить путь к SD-карте, попробуйте следующий код:

public static String getExternalSDCardRootDirectory() {


    String cmdMOUNT = "cat /proc/mounts";
    Runtime run = Runtime.getRuntime();
    List<String> paths = new ArrayList<>();
    try {
        Process p = run.exec(cmdMOUNT);
        BufferedInputStream in = new BufferedInputStream(p.getInputStream());
        BufferedReader inBr = new BufferedReader(new InputStreamReader(in));

        String lineStr;
        while ((lineStr = inBr.readLine()) != null) {
            Log.d(TAG, lineStr);
            if (lineStr.toLowerCase().contains("sdcard") || lineStr.toLowerCase().contains("ext") ) {
                String[] strArray = lineStr.split(" ");
                if (strArray.length >= 3 &&
                        (!strArray[1].contains("/system") && 
                        !strArray[1].contains("/data") &&
                        !strArray[1].contains("/cache") &&
                        !strArray[1].contains("/persist") 
                        )) {

                    String result = strArray[1].trim();

                    if((result.contains("ext") || result.contains("1")) && result.contains("storage")) {
                        paths.add(result);
                    }
                    //return result;
                }
            }
            if (p.waitFor() != 0 && p.exitValue() == 1) {
                Log.e(TAG, "check mount info failed");
                return null;
            }
        }
        inBr.close();
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    if (paths.size() > 0) {
        return paths.get(0);
    }
    else {
        return null;
    }
}
person aolphn    schedule 01.11.2018
comment
Все вышеперечисленное '//возврат результата;' мало что сделает.;) Вы можете упростить это, просто используя return paths.get(0) - person Jomme; 03.03.2020

Для получения пути вам нужно позвонить Environment.getExternalStorageState()

person p.alexey    schedule 31.10.2018
comment
Я пробовал этот код, но он монтируется, даже если я удалил SdCard. - person Raptor; 01.11.2018