Erro mnt/sdcard open failed eacces (permission denied) no Android

HI,

um aplicativo antigo, que precisa gravar arquivos que são baixados via ftp apresentou um erro na rotina de comunicação no Samsung A51. Suspeitei logo de ser por conta da versão do Android.

Como meu celular ainda está na versão 8, usei o emulador para saber qual o motivo do erro. Fora exibidas mensagens de erro de gravação e abertura de arquivo, mas a permissão estava ok.

Pesquisando no Google, achei essa soluçao:

Exception ‘open failed: EACCES (Permission denied)’ on Android
https://stackoverflow.com/a/57804657

Eu tinha modificado a API de 28 para 29, só assim seria aprovado na loja. Na versão 30 já terei que modificar o código para o novo padrão.

Tem isso na documentação

Casos de uso e práticas recomendadas de armazenamento

Para dar aos usuários mais controle sobre os arquivos e limitar a desorganização dos arquivos, o Android 10 introduziu um novo modelo de armazenamento para apps chamado armazenamento com escopo. O armazenamento com escopo muda a forma como os apps armazenam e acessam arquivos no armazenamento externo de um dispositivo. Para migrar seu app para oferecer suporte ao armazenamento com escopo, siga as práticas recomendadas para casos de uso de armazenamento comuns descritas neste guia. Os casos de uso são organizados em duas categorias: gerenciamento de arquivos de mídia e gerenciamento de arquivos que não são de mídia.

Fonte
Casos de uso e práticas recomendadas de armazenamento (android.com)

A solução é justamente para desativar o armazenamento com escopo.

Mas tem esse alerta

Cuidado: depois de atualizar seu app para o Android 11 (API de nível 30), o sistema ignorará o atributo requestLegacyExternalStorage quando o app for executado em dispositivos Android 11. Portanto, o app precisa ser compatível com o armazenamento com escopo e migrar dados de app para os usuários nesses dispositivos.

Intel +, Fiquem na Paz!

Deixe uma resposta