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.
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.
Muito bom artigo, já sofri muito com esta permissões, vou passar a usar esta biblioteca.
Obrigado, Glayson. Boa sorte!