Simplificando a Solicitação de Permissão no Android

A maioria dos desenvolvedores Android e já desenvolveu algum aplicativo que precisou utilizar recursos como a câmera ou acessar os arquivos do dispositivo do usuário. Para ter acesso a esses recursos, o SDK do Android exige que o usuário libere o acesso a eles antes que o app possa utilizá-los. Geralmente, esse pedido de permissão é exibido ao usuário no formato de um Dialog, para que ele selecione se permite ou não o uso.

No caso do app precisar de permissões de recursos, o trabalho para o desenvolvedor está em implementar a requisição da permissão, verificar a resposta do usuário e, quando o recurso for necessário novamente, checar se o recurso já foi liberado. Dessa forma, para ajudar os desenvolvedores na solicitação das permissões, neste post, eu irei demonstrar como utilizar a biblioteca Permissions Dispatcher para facilitar o gerenciamento dessas permissões.

Como essa biblioteca tem total suporte a linguagem Kotlin, vou desenvolver todo o exemplo usando essa linguagem. =]

Agora, podemos começar!

O primeiro passo para utilizar a biblioteca, é importá-la no nosso build.gradle. Como essa biblioteca suporta Kotlin, também precisamos inserir o plugin de compilação da Kotlin no build.gradle:

Como build.gradle sincronizado, o próximo passo é acrescentarmos ao AndroidMainfest as permissões que nós queremos ter acesso no dispositivo do usuário. No caso desse exemplo, solicitaremos o acesso à câmera do usuário.

Feito isso, podemos criar a nossa Activity, a qual irá conter o código responsável pela solicitação da permissão. Abaixo, está exposto o código inicial da nossa Activity:

No código acima é possível notar que existem anotações em determinados trechos. Isso se deve ao fato da Permissions Dispatcher ser baseada em anotações.

A anotação @RuntimePermissions serve para registrar a classe para manipular permissões. Por sua vez, a anotação @NeedsPermission deve ter como parâmetro a permissão a ser pedida e estar associada ao método que irá precisar do recurso a ser solicitado. É importante esclarecer que ao associar a @RuntimePermissions a uma classe, é obrigatório o uso da @NeedsPermission em algum método. Lembrando que os métodos ligados às anotações não pode ser privados.

A anotação @OnShowRationale deve ser vinculada ao método que irá exibir uma mensagem ao usuário antes da solicitação do recurso. Por sua vez, a @OnPermissionDenied pode ser usada para executar algum método caso a permissão seja negada. Por fim, @OnNeverAskAgain pode ser associada ao método que irá ser executado caso o usuário tenha marcado a solicitação do recurso como “never ask again” (o usuário pegou trauma da solicitação kkkk).

Com todas as anotações associadas aos seus respectivos métodos, quando o build for executado a classe MainActivityPermissionsDispatcher será criada. Essa classe servirá como helper para podermos chamar os métodos que especificamos anteriormente. Dessa forma, o código final da nossa classe ficará da seguinte forma:

Podemos ver que na Activity foi criado um botão, o qual ao ser clicado chama o método showCameraWithPermissionCheck. Esse método pertence à classe MainActivityPermissionsDispatcher e é responsável por ativar o processo de solicitação da permissão. Além disso, o método onRequestPermissionsResult chama o onRequestPermissionsResult da classe MainActivityPermissionsDispatcher, uma vez que ela é quem gerencia o processo de permissão.

No gif abaixo é possível ver o aplicativo criado neste post funcionando. Ao clicar no botão a permissão é solicitada, dependendo da escolha do usuário, ou seja, se ele aceita ou não, o aplicativo exibe um Toast contendo a opção selecionada.

permission_dispatcher_exemplo

Bom, é isso. Espero que este post facilite o desenvolvimento do seu app!

Para ver o código completo do exemplo criado neste tutorial acesse: Exemplo Permission Dispatcher

Qualquer dúvida, deixa um comentário.

2 Comment

  1. Glayson Junio says: Responder

    Muito bom artigo, já sofri muito com esta permissões, vou passar a usar esta biblioteca.

    1. Luiz Marcus Luiz Marcus says: Responder

      Obrigado, Glayson. Boa sorte!

Deixe uma resposta