Eu entendo que ExternalFiles deve ser usado na API 8 e superior e getExternalStorageDirectory é para 7 e inferior. Porém estou um pouco confuso quanto ao uso. Por exemplo, eu queria verificar se existe uma pasta e anteriormente você usaria algo como:
File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");
No entanto, todos os exemplos que vejo dizem para usar getExternalFilesDir (null), File.ext. Como estou acima da API 8, desejo usar este método, mas como faço para verificar se há uma pasta? Vou verificar a existência de arquivos em outro ponto, mas por enquanto só quero ver se as pastas existem ??
getExternalStorageDirectory()
não não necessariamente - talvez até mesmo geralmente não - "caminho para o seu cartão SD" devolver o Em vez disso, ele retorna o "diretório de armazenamento externo primário". Os documentos ( developer.android.com/reference/android/os/… ) dizem:Em primeiro lugar, precisamos entender qual é a diferença entre armazenamento interno, armazenamento externo (também conhecido como armazenamento externo primário) e armazenamento externo secundário.
Armazenamento interno: é o armazenamento que não pode ser acessado pelo usuário, exceto por meio de aplicativos instalados (ou através do enraizamento do dispositivo). Exemplo: data / data / app_packageName
Armazenamento externo primário: Em armazenamento compartilhado integrado que é "acessível ao usuário conectando um cabo USB e montando-o como uma unidade em um computador host". Exemplo: quando dizemos Nexus 5 de 32 GB.
Armazenamento externo secundário: armazenamento removível. Exemplo: cartão SD.
Ele retorna o caminho para a pasta de arquivos dentro de Android / data / data / your_package / no armazenamento externo primário. Que é o armazenamento embutido.
Ele retornará o caminho do diretório de armazenamento externo secundário
fonte
File getExternalStoragePublicDirectory (String type)
eFile getFilesDir ()
também! ATUALIZAÇÃO IMPORTANTE ! para quem se depara com esta questão.
Como esta é uma questão um tanto antiga, só queria fornecer algumas informações adicionais. Desde o KitKat, mesmo os aplicativos que têm permissão WRITE_EXTERNAL_STORAGE só têm permissão para gravar em Android / data / data / your_package / em armazenamento externo, também conhecido como
getExternalFilesDir()
Se você tentar escrever para
getExternalStorageDirectory() + "/somefolder/anotherfolder/"
, obterá uma SecurityException na maioria dos dispositivosfonte
!! IMPORTANTE !!
Environment.getExternalStorageDirectory()
está obsoleto e Context # getExternalFilesDir (String), MediaStore ou Intent # ACTION_OPEN_DOCUMENT deve ser usado em seu lugar.https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory ()
Também começando pelo Android.M, os desenvolvedores precisam pedir permissões em tempo de execução.
Veja mais detalhes na documentação aqui e esta questão
Environment.getExternalStorageDirectory () obsoleto na API de nível 29 java
fonte