Não é possível criar pasta no armazenamento externo no android
Meu telefone de desenvolvimento é umNexus 5
, corridaAndroid 4.4.2
.
No meu aplicativo, estou tentando criar uma pasta no armazenamento externo que armazene informações de depuração para o meu aplicativo. Basicamente, ele conterá todos os comandos executados pelo aplicativo, para que, quando um usuário encontre um problema, eu tenha a opção de enviar as informações da pasta de depuração para análise.
Comecei tentando gravar um arquivo na pasta, mas descobri que havia um erro ao criar a pasta. No começo eu estava usandomkdir()
, então eu mudei paramkdirs()
o que também não funcionou.
eu tenho<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
no meu manifesto.
Aqui está o código para criar a pasta:
File folder = new File(Environment.getExternalStorageDirectory() + "/DebugData");
String path = folder.getPath();
if(!folder.mkdirs() || !folder.exists()){
Log.e(LOG_TAG, path + " failed");
} else {
Log.d(LOG_TAG, path + " succeeded");
}
Aqui está o que eu também tentei:
//Check SD card state
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || !Environment.MEDIA_MOUNTED.equals(state)) {
Log.e(LOG_TAG, "Error: external storage is read only or unavailable");
} else {
Log.d(LOG_TAG, "External storage is not read only or unavailable");
}
Isso retorna que o armazenamento externo énão somente leitura ou indisponível.
Eu também tentei caminhos diferentes, comoFile folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Folder1");
Foi aqui que ficou realmente confuso.
Eu tentei o desenvolvimento em telefones diferentes. Em primeiro lugar, peguei umGalaxy S4 GT-i9505
corridaAndroid 4.2.2
e funcionou. Consegui criar as pastas e escrever nelas. Isso me mostrou que o código estava funcionando. Além disso, o caminho retornado executando o código no S4 e no Nexus 5 era o mesmo.
Então eu pensei que pode ser específico para a versão android. Então eu peguei umNexus 4
comAndroid 4.4.2
e o código funcionou nele também. Criou as pastas e me permitiu escrever para elas.
Nenhum dos telefones está enraizado e é padrão de estoque. Não há aplicativos especiais ou qualquer coisa que eu possa pensar nas configurações no Nexus 5 que causariam problemas de permissão. A conexão está configurada para Dispositivo de mídia (MTP).
EDITAR:
Devo acrescentar que tentei o seguinte que também não funcionou:
Gravando um arquivo no diretório raiz do armazenamento externoCriando o arquivo no diretório raiz do armazenamento externo e gravando neleCriando uma pasta em um caminho descrito e gravando um arquivo nelaCriando o arquivo no caminho descrito e gravando neleEstou confuso sobre o que está causando isso. Existe algo mais que eu possa testar ou alterar para corrigir o problema?
EDIT 2:
Acontece que o problema se deveu à indexação.
Basicamente, todos os outros dispositivos em que testei me permitiram reconectar a conexão USB e visualizar os arquivos e pastas criados.
Por alguma razão, meu Nexus 5 não indexa as pastas / arquivos, mesmo que eles existam.
Eu baixei um aplicativo explorador de arquivos de terceiros diferente e notei que todas as pastas e arquivos estavam lá.
Então, para visualizar essas pastas e arquivos via depuração USB, preciso reiniciar o telefone para indexá-los novamente, o que parece bastante irritante, mas é melhor do que não está funcionando.
Obrigado.