Auto Start! Faça seu aplicativo ser executado quando o dispositivo acabar de ligar!

É muito comum em aplicativos corporativos o requisito de auto start. Ou seja, a capacidade do aplicativo ser iniciado assim que o dispositivo é ligado.
Este requisito nem sempre foi fácil de ser atingido. Utilizando J2ME por exemplo o auto start é algo realmente difícil de desenvolver.

Mas com o Android, as coisas começaram a ficar um pouco mais fáceis.

Vejamos como realizar essa tarefa no SO da Google.

O primeiro passo é indicarmos na tag de permission do AndroidManifest.xml  o código android.permission.RECEIVE_BOOT_COMPLETED. Essa ação é uma exigência do Android para que o usuário da aplicação saiba que recursos a aplicação que ele esta instalando fará uso. Sem essa tag uma RuntimeException será disparada no momento em que a sua aplicação tentará usar o recurso.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

Agora deveremos criar um BroadcastReceiver  que representará a ação que será executada no momento em que o dispositivo acabar de ligar totalmente. A classe BroadcastReceiver da API do Android tem o objetivo de executar um pequeno processamento em background. Geralmente é utilizada para interceptar Intents como a que é disparada no momento em que a o dispositivo se inicia.

public class BootUpReceiver extends BroadcastReceiver {
  
     @Override
     public void onReceive(Context context, Intent i) {
        Intent intent = new Intent(context, MinhaActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
     }

}

Podemos ver no código acima que quando o BroadcastReceiver for executado uma Activity será chamada. Mas isso foi só um exemplo. O desenvolvedor é livre para executar o que quiser nesse ponto como, iniciar um Service, uma tarefa agendada, dentre outras coisas.

Outro detalhe importante é que adicionanos a flag Intent.FLAG_ACTIVITY_NEW_TASK para exibir nossa Activity. Pois até esse momento nenhuma Acitivity da aplicação foi iniciada, essa será a primeira. Caso essa flag não esteja presente uma exceção em tempo de execução será lançada.

Após criar o BroadcastReceiver devemos anuncia-lo no AndroidManifest.xml da aplicação assim como fazemos com as nossas Activitys. Um detalhe a ser explicado é que a IntentFilter dentro da tag do Receiver indica que esse BroadacastReceiver irá ser executado quando a intent BOOT_COMPLETED acontecer. Ou seja, quando o dispositivo for ligado.

<receiver android:enabled="true"
  android:name=".receivers.BootUpReceiver"
  android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

E pronto, sua aplicação sera iniciada automaticamente quando o dispositivo for ligado.

Este link me ajudou muito neste post.

O Bloqueio do Home do Android.

O recurso do Auto-start é muito utilizado em aplicações onde a empresa não deseja que o usuário, no caso um empregado, consiga finalizar a aplicação. De modo que quando ele reiniciar a aplicação vai aparecer sozinha. Mas esta não é a única estratégia a ser adotada nesse tipo de cenário. Também seria uma boa ideia bloquear a ação do botão HOME do Android.

Para quem não sabe o botão HOME é aquela função que possui um ícone de uma casa. Ao ser pressionado, o Android colocará a aplicação que esta rodando em segundo plano e exibirá a tela inicial do sistema operacional.

Para bloquear essa ação é muito simples, basta colocar o seguinte código nas Activitys que se deseja bloquear o botão HOME.

        @Override 
	public void onAttachedToWindow() {
	  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
	  super.onAttachedToWindow(); 
	}

Pronto!

Anúncios

, ,

  1. #1 by André on Agosto 29, 2017 - 7:42 pm

    Boa tarde Leonardo, uma pergunta, tenho um mini pc Android 4.2, esse OS não tem o botão de desligar. Teria como eu adicionar esse botão(sou totalmente leigo com Linux). Obrigado e fico no aguardo.

  2. #2 by Edy Rocha on Agosto 25, 2017 - 2:36 pm

    Boa tarde Leonardo, sabe me dizer se esse artigo ainda vale para os novos Sistemas android?

    • #3 by Leonardo Casasanta on Agosto 26, 2017 - 4:31 pm

      Ola testei no meu telefone com o Android 6, e funcionou corretamente. Não li nenhuma interferência nessa funcionalidade nas versões mais novas do Android. Vale lembrar que o tempo que o aplicativo abre após a incialização pode variar de acordo com a quantidade de outros aplicativos ou serviços que esta configurado para abrir automaticamente também.

  3. #4 by Everton Cesar Chimini on Fevereiro 16, 2017 - 9:36 pm

    Boa Noite Leandro. Eu poderia usar isso em um serviço android que terá que iniciar ao ligar o aparelho?

    • #5 by Leonardo Casasanta on Agosto 26, 2017 - 4:32 pm

      Pode sim. Imagino que aplicativos como o de SMS já fazem algo assim. A única mudança é que ao invés de chamar sua Activity no BroadcastReceiver, basta chamar o Service desejado.

  4. #6 by Pedro on Fevereiro 15, 2017 - 9:44 am

    Bom dia.
    Eu gostaria que sempre ao iniciar o meu android ele apaga-se o conteúdo interno de uma pasta específica. Alguém pode me ajudar com isto ? Já procurei aplicativos para isto, mas não encontro nenhum que possa fazer isto.

  5. #8 by Fabilei Spinelli on Novembro 5, 2015 - 5:25 pm

    Olá, realizei o procedimento como descrito, mas ao ligar o aparelho buga a inicialização do meu App, referenciei minha activity principal.

  6. #9 by RODRIGO on Outubro 6, 2014 - 1:45 pm

    Leonardo, existe algum outro meio de abrir apps (tela cheia) ao iniciar o Android para leigos em programação? Tipo, apenas com o root + Xposed Framework + módulo ou de outra forma?

  7. #10 by Daniel on Junho 18, 2014 - 10:41 pm

    Boa Noite,
    Estou com um problema… preciso fazer com que um MINI PC ANDROID 4.0, quando iniciado, comece a rodar uma sequencia de videos armazenados na memória, automaticamente… ou seja, preciso que um player de video qualquer do android comece a rodar sozinho quando ligo o mini pc… como faço isso?

  8. #12 by Rodrigo Sozi Kauling on Junho 16, 2014 - 11:50 pm

    Boa tarde Leonardo, show de bola o post, cara to com o seguinte problema, fiz da forma como vc mencionou acima, e por algum motivo, na abertura do aparelho ele vem bloqueado, após o desbloqueio vem a minha aplicação aberta, estou utilizando o android Gingerbread 2.3.3, o que poderia estar ocorrendo, se puder me ajudar ficarei grato. Vlw

    • #13 by Leonardo Casasanta on Junho 18, 2014 - 2:11 pm

      Ola Rodrigo, obrigado pelo feedback.

      Acontece que o bloqueio é um aplicativo do Android e também esta configurado para ser chamado quando o dispositivo ligar e/ou quando acontecer um determinado intervalo de tempo de inatividade do usuário.
      Nunca tive a necessidade de impedir que ele aconteça, e nem sei se é possível impedir.

      Eu acho que o ideal é você mudar a configuração desse bloqueio no aparelho.

      Ou você pode tentar controlar esse aplicativo via código, o link abaixo ensina a pegar o aplicativo que esta em execução. Se você identificar que o aplicativo que esta em execução é o de bloqueio você pode tipo chamar o seu app novamente mas não sei se funciona vale a pena testar.
      http://stackoverflow.com/questions/8091350/how-to-find-the-currently-running-applications-programatically-in-android

      Abraço.

  9. #14 by Malainho on Abril 19, 2014 - 7:29 pm

    Olá Leonardo, parabéns pelo conteudo do seu blog que é bastante interessante.
    Exelente iniciativa e em Português.

    Já estudo Android há quase 2 anos e conhecimento nunca é demais.

    Passarei a acompanhar de perto o seu blog

    Um abraço
    Malainho

  1. Auto Start Android - Matheus Piscioneri

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: