Controle o Tempo de Sessão por Inatividade

3

Controlar o tempo de sessão em alguns aplicativos é muito importante, principalmente nos aplicativos onde dados pessoais são considerados críticos, por exemplo aplicativos de Banco. Você já deve ter percebido nesses aplicativos de banco quando você fica sem interagir com o mesmo por um determinado tempo, recebemos a mensagem de que a Sessão foi expirada e temos que efetuar o login novamente.

Vamos ver na prática como se faz o controle do tempo de sessão por inatividade.

Referência

1. Mão na massa

Para este tutorial vamos definir o tempo de 30 segundos como tempo máximo de inatividade permitido, assim, se o usuário não interagir com o aplicativo, o mesmo será redirecionado para a tela de login e uma mensagem de Sessão Expirou será exibida.

A primeira providência a ser tomada é criar uma classe que herde a classe Application e em seguida informar no arquivo de manifesto o nome desta classe dentro da TAG Application.

Pronto, para fazer a contagem regressiva criamos uma classe chamada MyCounter que herdou a classe CountDownTimer e alguns métodos na classe principal para controlar esse contador.

Agora vamos criar uma tela de Login fictícia apenas para efeitos de simulação do exemplo. Nesta tela faremos a validação dos dados digitados e um AlertDialog para exibir a mensagem Sessão Expirou quando a contagem atingir o limite.

Tela Login

Agora vamos criar uma tela que deverá ser chamada após o login. Nessa tela vamos mostrar o tempo de sessão sendo atualizado e caso haja uma interação do usuário, o mesmo deverá ser atualizado. Caso o tempo seja finalizado 00:00 deverá retornar para a tela de login com o aviso de Sessão Expirada.

Tela Principal

Por fim temos a mensagem de aviso de Timeout na tela de login.

Tela Timeout

Mas, você deve estar se perguntando. Como é que eu fiz para avisar a tela MainActivity para atualizar o tempo ? A resposta é simples, utilizei um BroadcastReceiver. Broadcast Receivers são componentes responsáveis por receber e tratar eventos provenientes do sistema ou de outras aplicações. Olhe no arquivo SessaoExpirou.java dentro da classe MyCounter que utilizo o comando para enviar esse evento

e dentro da classe MainActivity eu faço o registro do Broadcast dentro do método onResume().

Criamos o BroadcastReceiver, onde ocorrerá a ação do evento chamado TIMEOUT. Perceba que é nele que atualizamos a amostragem do tempo.

É muito importante não esquecer de efetuar a remoção do Broadcast antes de finalizar uma Activity (tela), veja que faço isso no método.

Código Fonte

Clique aqui para baixar o projeto completo.

Qualquer dúvida sobre algum dos métodos ou sobre outro assunto relacionado ao tutorial, deixe seu comentário.

Share.

About Author

gorio

Engenheiro de Computação, com 6 anos de experiência e vivência no mundo de Sistemas Embarcados e Mobile.

3 Comentários

Leave A Reply

*