Restrição de gravação no Android 10 e posteriores

Consulte o artigo https://developer.android.com/training/data-storage/use-cases para informações mais detalhadas e atualizadas sobre a questão.

A partir da API 29, não é mais possível usar a permissão WRITE_EXTERNAL_STORAGE para gravar dados no diretório /sdcard. Apresentamos nesta Seção algumas sugestões para contornar essa limitação. Porém, antes de aplicar um desses contornos, recomendamos que os desenvolvedores da aplicação se informem sobre a questão para tomar a decisão mais adequada (veja o artigo indicado na caixa de aviso acima).

  1. Desativar o armazenamento com escopo. Caso a aplicação não utilize recursos de APIs > 29, há duas possibilidades para desativar essa nova restrição e manter o comportamento das APIs < 29. Ao escolher uma das duas opções abaixo, a aplicação não precisará de nenhum outro ajuste para gravar os traces no /sdcard.

    a. Reduzir o targetSdkVersion do projeto para 28. b. Manter o targetSdkVersion do projetoem 29 e definir equestLegacyExternalStorage como true no AndroidManifest.xml.

  2. Definir o DiretorioTrace com um caminho interno. Caso não seja possível diminuir o targetSdkVersion, a aplicação pode definir no CLSIT o parâmetro “DiretorioTrace=./files”, que determina que a gravação do trace ocorra em um diretório para o qual a aplicação não necessita solicitar permissão. A desvantagem dessa solução é que o acesso a esse diretório só pode ser feito pela própria aplicação ou por ferramentas de desenvolvimento. Então a aplicação precisará implementar uma maneira de extrair os arquivos. Seguem duas sugestões.

    a. Ativar a funcionalidade de Trace Rotativo no CLSIT. Essa funcionalidade, além de limitar o tamanho e rotacionar os arquivos de trace, permite também enviá-los para o servidor SiTef. Dessa forma, as equipes de Suporte ou Operação podem recuperar os arquivos. Esse envio deve ser iniciado pela aplicação através do menu Administrativo com interação do operador (Função 1) ou diretamente pela Função 121, iniciada pelo operador ou automaticamente pela aplicação. Consulte o documento “SiTef - Interface Simplificada com a aplicação.pdf” para mais detalhes. É importante observar que essa funcionalidade dificulta a análise em caso de erros de rede, já que a rede será necessária para enviar os arquivos.

    b. Utilizar o Storage Access Framework (SAF) para solicitar ao usuário o acesso de escrita ao /sdcard (PrimaryStorageVolume). Dessa forma, é possível gravar dados nesse diretório usando instâncias de DocumentFile. A aplicação deverá então definir um critério para transferir os arquivos de trace (CliSiTef.dmp*)do caminho interno escolhido para o /sdcard.