Caminho do arquivo SDCard externo para Android

? Bowie @ | Original: StackOverFlow
---

É verdade que o caminho do arquivo para SDCard externo em dispositivos Android são sempre " / storage / extSdCard " ? Se não, como muitas variações existem?

Eu preciso dele para o meu App para testar a disponibilidade de SDCard externo.

Eu estou usando titânio, tem um método Titanium.Filesystem.isExternalStoragePresent ( ) mas sempre retornar verdadeiro SDCard mesmo externa não está montado.

Eu acho que detectar SDCard no armazenamento local, assim, retornar true . Mas o que eu realmente quero é detectar se SDCard física é montado ou não.

Posso fazer isso, detectando a existência de arquivo " / storage / extSdCard " sozinho?

Thanks.

---

Top 5 Responder

1Kishan @

Use isto se o trabalho para você, porque este está funcionando perfeitamente para mim :

Map<String, File> externalLocations = MemoryStorage
            .getAllStorageLocations();
    File sdCard = externalLocations.get(MemoryStorage.SD_CARD);
    File externalSdCard = externalLocations
            .get(MemoryStorage.EXTERNAL_SD_CARD);
    if (sdCard != null) {
        Log.i("TAG", "Internal SD path: " + sdCard.getPath());

    }
    if (externalSdCard != null) {
        Log.i("TAG", "External SD path: " + externalSdCard.getPath());

    }
2Digoun @

É verdade que o caminho do arquivo para SDCard externo em dispositivos Android são sempre " / storage / extSdCard " ? Se não, como muitas variações existem?

Infelizmente o caminho para o armazenamento externo nem sempre é o mesmo de acordo com a fabricante. Usando o Environment.getExternalStorageDirectory() irá voltar o caminho normal para cartão SD que é mnt/sdcard/ . Mas para dispositivos Samsung, por exemplo, o caminho do cartão SD ou é em mnt/extSdCard/ ou em mnt/external_sd/ .

Assim, uma forma de proceder seria a de verificar a existência de diretório externo de acordo com o caminho usado por cada fabricante . Com mais ou menos assim :

mExternalDirectory = Environment.getExternalStorageDirectory()
            .getAbsolutePath();
    if (android.os.Build.DEVICE.contains("samsung")
            || android.os.Build.MANUFACTURER.contains("samsung")) {
        File f = new File(Environment.getExternalStorageDirectory()
                .getParent() + "/extSdCard" + "/myDirectory");
        if (f.exists() && f.isDirectory()) {
            mExternalDirectory = Environment.getExternalStorageDirectory()
                    .getParent() + "/extSdCard";
        } else {
            f = new File(Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/external_sd" + "/myDirectory");  
            if (f.exists() && f.isDirectory()) {
                mExternalDirectory = Environment
                        .getExternalStorageDirectory().getAbsolutePath()
                        + "/external_sd";
            }
        }
    }

Mas o que eu realmente quero é detectar se SDCard física é montado ou não.

Eu não experimentar o código ainda, mas a abordagem de Dmitriy Lozenko neste http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4 -0 é muito mais interessante . Seu método retorna o caminho de todos os cartões SD montados em sytem, independentemente do fabricante .