technology

Como corrigir a exceção ‘falha ao abrir: EACCES (permissão negada)’ no Android 11/12

.

Hoje, estava trabalhando com meu antigo programa, que havia feito em dezembro de 2020. Por algum motivo estranho, atrasei o processo de desenvolvimento do meu aplicativo.

Um aplicativo estava funcionando há alguns meses, quando de repente o aplicativo travou com o erro Exceção ‘falha ao abrir: EACCES (Permissão negada)’.

O fluxo de trabalho do aplicativo era bastante simples. Quando o usuário clicar no “Botão Compartilhar” programaticamente, o aplicativo fará uma captura de tela e usará a intenção explícita para enviar capturas de tela usando qualquer aplicativo compatível com o compartilhamento de imagens.

Fiz uma pausa por um momento e comecei a pensar: O que aconteceu de repente com o projeto? Se você ler o erro, ele diz que algo está errado com as permissões.

Instantaneamente, verifiquei o código de permissões e descobri que estava tudo bem. Quando abri o manifesto do Android, encontrei o culpado: “WRITE_EXTERNAL_STORAGE não fornece mais acesso de gravação ao segmentar o Android 10+.”

AndroidManifest.xml

O problema começa a ficar mais claro.

eu abro build.gradle e a versão de destino verificada são alteradas para API 30 (Android 11) de alguma forma.

build.gradle
build.gradle

Como de costume, eu fiz pesquisar e descobriu que o destino do aplicativo para O SDK 29 ou posterior usa armazenamento com escopo como opção padrão.

Se você está pensando, O que é armazenamento com escopo? Vou esclarecer para você que o Scoped Storage define um limite no acessar arquivo.

Por exemplo, se meu aplicativo XYZ estiver armazenado em um local de diretório específico e quiser fazer upload de fotos de qualquer outro diretório que não seja o diretório do aplicativo, não terei permissão para acessar o arquivo de acordo com a nova política do Google.

Então temos o problema; diga-me, Gagan, como resolver isso? Você pode usar o MediaStore método ou simplesmente use o Política de armazenamento legado.

Como resolver o erro acima usando o LegacyStorage?

Precisamos passar a única linha de código, que irá desligar a bandeira para Android 10+ dispositivos, e você terá permissão para usar LegacyStorage.

Vá para o painel do projeto, clique em AndroidManifesto, e adicione o código destacado dentro .

<manifest ... > 
 <application 
    ...
    android:requestLegacyExternalStorage="true" ..>
    ...
  </application>
</manifest>

As alterações devem ser como esta abaixo da imagem de exemplo.

Exceção 'falha na abertura: EACCES (Permissão negada)'
Adicionar requestLegacyExternalStorage

Depois de adicionar requestLegacyExternalStorage = “verdadeiro” debaixo de marcação. Isso é tudo para usuários do Android 10 ou 11. Você pode testar seu aplicativo.

Para o Android 12, os usuários precisam adicionar mais uma tag em AndroidManifest.xml aquilo é “android:exportado=”verdadeiro” para o Atividade principal.

Exceção 'falha ao abrir: EACCES (Permissão negada)': Adicionar tag exportada
Adicionar etiqueta exportada

Execute o aplicativo e as funções do aplicativo começarão a funcionar novamente.

Leia também: Como corrigir exposição além do aplicativo por meio de ClipData.Item.getUri

Embrulhar

é isso pra resolver Exceção ‘falha ao abrir: EACCES (Permissão negada)’. Se você ainda estiver enfrentando problemas ao seguir este guia, informe-nos na seção de comentários.

Para facilitar, carregamos um projeto de amostra no repositório GitHub. Para clonar o repositório clique neste link.

Quais são seus pensamentos sobre este artigo?

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo