Android: найти, если SD-карта присутствует - PullRequest
4 голосов
/ 16 августа 2011

У меня проблема. У меня есть вкладка Galaxy, которая поставляется с 16 ГБ встроенной памяти и 2 ГБ SD-карты.

когда я использую environment.getExternalStorageState, он возвращает смонтированный. Однако, когда я удаляю SD-карту из своей вкладки galaxy, она все равно возвращается подключенной, поскольку считает внутреннее хранилище внешним хранилищем. Можно ли как-то отличить фактическую SD-карту от внутренней памяти?

Спасибо

Ответы [ 5 ]

2 голосов
/ 16 августа 2011

Кажется, в настоящее время нет публичного API для этого.Вы можете проверить, посмотрев на /proc/mounts, но ваш код будет зависеть от устройства, поскольку не все устройства монтируют вторичное внешнее хранилище (SD-карту) в одном месте.

1 голос
/ 16 августа 2011

Возможно, вы сможете определить путь монтирования SD-карты и, если он не связан с системой, то, вероятно, это внешний носитель.Попробуйте проверить эту ссылку здесь:

Найти расположение внешней SD-карты

0 голосов
/ 26 января 2016

Я создал собственную проверку, и она работает. Он проверяет наличие вторичной, реальной SD-карты. Протестировал его на Samsung Galaxy s5 neo, Alcatel one touch 5020x и на HTC One X. Код должен работать на устройствах KITKAT, поскольку для проверки используется каталог приложения по умолчанию.

Я создаю строку хранилища путей к приложениям по умолчанию в основном хранилище. Затем измените «основной» на «дополнительный», затем попробуйте создать папку и проверить наличие.

Вот код:

String primaryStorage = Environment.getExternalStorageDirectory().getAbsolutePath();
String secondaryStorage = System.getenv("SECONDARY_STORAGE");
Boolean hasSecondary = false;

String internalSD = getExternalFilesDir(null) + "/test";
String externalSD = internalSD.replace(primaryStorage, secondaryStorage);

            try{
                File dir = new File(externalSD);
                dir.mkdirs();

                if (dir.isDirectory()) {
                    dir.delete();
                    hasSecondary = true;
                }                   
            } catch (Exception e) {
            }
0 голосов
/ 19 декабря 2013

Я думаю, /storage/sdcard0/ используется для внутренней SD-карты и /storage/sdcard1/ используется для внешней SD-карты, если есть две опции хранения. если вы проверяете, присутствует ли файл в любом из sdcard или нет, вы должны проверить все возможные пути.

String path;    
if(new File("/mnt/sdcard/yourpath").exists()) {
    path="/storage/sdcard/yourpath";
} else if(new File("/storage/sdcard0/yourpath").exists()) {
    path="/storage/sdcard0/yourpath";
} else if(new File("/storage/sdcard1/yourpath").exists()) {
    path="/storage/sdcard1/yourpath";
}
0 голосов
/ 16 августа 2011

Я так стараюсь

    if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
{

    Log.i("tag", "SDCard is mounted");

    }

или этот пример поможет вам

...