Pular para o conteúdo principal

Respondendo a eventos no Android - BroadcastReceiver

Ola pessoal!

Um telefone qualquer, durante o seu funcionamento realiza diversos "eventos", como por exemplo iniciar uma ligação, finalizar uma ligação, receber um SMS, enfim, o tempo todo o SO do telefone está realizando alguma operação. E na plataforma Android, esses eventos são avisados a todas aplicações e que se desejarem, podem responder a essas ações, e isso é feito através dos BroadcastReceiver.
Para isso, basta você criar uma classe que estenda de BroadcastReceiver e registrá-la corretamente no AndroidManifest.xml. Com isso, o SO irá notificar sua classe que deverá executar em no máximo 2 segundos, e normalmente ela terá três opções:
  • Realizar uma notificação.
  • Iniciar um serviço.
  • Iniciar uma aplicação.
Então, para esse post vamos fazer um exemplo onde ao iniciar o telefone iremos então iniciar a nossa aplicação, tipo de comportamento que já vi muitas pessoas perguntarem como se fazia em Java ME, mas que não era possível.

Criando um BroadcastReceiver

Ao estender uma classe BroadcastReceiver, o método que vamos que ter que implementar é o onReceive, que será chamado pelo SO quando a ação que você deseja interceptar for executada. O código para uma classe que inicie uma Activity é o seguinte:

public class AfterBootBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AfterBootActivity.class);
i.addCategory(Intent.CATEGORY_DEFAULT);
context.startActivity(i);
}
}

O que vemos nesse código é a criação de uma Intent, que será responsável pela criação da atividade, e isso está indicado onde colocamos o AfterBootActivity.class como parametro da criação da Intent. E logo em seguida, inicia-se a atividade através da chamada do startActivity(i).

Registrando no AndroidManifest.xml

Além de criar a classe, é preciso registrar no arquivo de configuração da aplicação para que o Android possa saber que a sua aplicação espera por um determinado evento. Vamos ver então como fica a configuração:

<receiver android:name="AfterBootBroadcastReceiver"
    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>

O principal a se atentar é a propriedade android:permission que deverá ter a permissão correta, pois o usuário precisa ser "avisado" dos tipos de ações a serem executadas em seu telefone. E além disso, dentro das opções de , na propriedade action deverá constar a ação que a sua classe interceptará. E então, simples assim, sempre que o celular finalizar o boot, sua aplicação será iniciada.

Concorrência

Se por um acaso, para alguma ação mais de um BroadcastReceiver quiser abrir uma aplicação, o usuário terá que escolher qual aplicação ele deseja abrir, e ele terá a opção de deixar alguma das aplicações como padrão para no futuro, não ter que escolher novamente.

Para saber mais...

Caso tenha ficado alguma dúvida ainda, um ótimo local para dar uma olhada em mais exemplos e entender melhor é o guia da classe BroadcastReceiver no guia de referência do Android. E não esqueça que você pode participar do grupo de desenvolvedores brasileiros de Android, basta visitar a página do grupo Android Brasil-dev no Google Groups.

Abraços e até a próxima.
Neto Marin

Comentários

Olá Neto.

Eu tive que colocar uma flag no meu Intent para funcionar:

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Você sabe porque foi necessário?

Obrigado
Neto Marin disse…
Opa.
Provavelmente porque sua Activity não estava configurada como Laucher no AndroidManifest.xml.

[]s
Neto
Então, pior que está configurada sim...ainda não consegui entender porque está pedindo.

Na minha activity tem o seguinte intent-filter:
intent-filter

action android:name="android.intent.action.MAIN"

category android:name="android.intent.category.LAUNCHER"

intent-filter
Felipe Fiorini disse…
Olá, estou pegando o texto de um sms e enviando para uma Activity mas quando chega no método startActivity o programa para de funcionar.

Segue o código

public void onReceive(Context context, Intent intent) {
//pegar o SMS recebido
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
//pegando conteudo da mensagem
String conteudoSms = "";
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
conteudoSms += msgs[i].getMessageBody().toString();
}
//Enviando senha para MainActivity
Intent i = new Intent(context, MainActivity.class);
i.putExtra("string", conteudoSms);
context.startActivity(i);
}

}
Silvio Lacerda. disse…
O brodcastReceiver funciona quando mando de volta um sms com um texto fixo. Blz. Mas, quero enviar o número do celular e o conteudo do sms para um serviço para poder rodar um método para pegar as coordenadas GPS. Tenho um código que rodou no emulador mas, no celular dá pau. Estando tudo no brodcastreceiver. creio que o tempo curto de 10 segundo não tem como quero rodar no serviço então. Mas, como chamar um serviço enviando o celular e o sms. Fico muito agradecido. Estou semm dormir direito a dias

Postagens mais visitadas deste blog

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação. Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar. Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito? A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividad...

TDC ONLINE: SUA PLATAFORMA DE PALESTRAS GRAVADAS DO TDC DISPONÍVEL

Além do conteúdo ao vivo transmitido online nas edições do TDC, agora você pode ter acesso à centenas de palestras gravadas, através da nossa nova plataforma de vídeos - o TDC Online, que reúne todas as Trilhas premium, Stadium e Salas dos Patrocinadores das edições anteriores de 2022, TDC Innovation e TDC Connections.  Para acessar, basta clicar na edição em que você participou ( TDC Innovation ou TDC Connections ); Fazer o mesmo login (com e-mail e senha) cadastrados na hora de adquirir ou resgatar o seu ingresso no TDC; E clicar na Trilha de sua opção, e de acordo com a modalidade do seu ingresso. Logo em seguida, você será direcionado para a seguinte página com a lista de todas as palestras por Trilha: Pronto! Agora você tem acesso à centenas de palestras gravadas da sua área de interesse, para assistir como e quando quiser! Caso tenha esquecido a senha, clique na opção "Esqueci a senha" , insira o e-mail que você realizou para o cadastro no evento, e aparecerá a op...

TDC BUSINESS, chega a São Paulo com novas trilhas de Inteligência Artificial e Inovação

Maior conferência de profissionais de tecnologia do Brasil abordará temas em alta no momento como, por exemplo, Inteligência Artificial, Segurança, Ciência de Dados e Inovação O TDC BUSINESS, a 17° edição do The Developer's Conference na cidade de São Paulo, que acontece entre os dias 19 e 21 de Setembro, reunirá profissionais e especialistas da área para troca de experiência, compartilhamento de conteúdos e networking. Com o tema central: “Tecnologia para negócios transformadores”, o evento será totalmente híbrido, ocorrendo presencialmente no espaço Pro Magno, e com transmissão simultânea e atividades de network pela internet. A expectativa é reunir mais de 14.000 pessoas, somando a participação presencial e online.   Segundo Yara Mascarenhas, Fundadora e Host do Evento, “nosso objetivo com o TDC é inspirar a colaboração entre os profissionais e empresas para construir uma nova realidade para o mercado de TI.  Vamos juntar tecnologia e negócios com as trilhas técnicas...

12 ESQUENTAS TDC ESPERANDO POR VOCÊ

O TDC nasceu do sonho de profissionais que valorizam o compartilhamento de conhecimento, experiências e oportunidades entre as comunidades de desenvolvedores.  Por isso, o crescimento do TDC nunca poderia ficar longe do crescimento das comunidades! Pensando nessa união, criamos um projeto quente: O ESQUENTA TDC ! Visando divulgar os meetups de comunidades que querem transformar e inspirar carreiras, foi co-criado este projeto lindo e cheio de apoio, onde o TDC abraça meetups de diversas comunidades espalhadas pelo Brasil e elas contribuem com a divulgação da edição regente.  O TDC Innovation vai rolar de 14 a 16 de JUNHO, mas até lá vão acontecer muitos encontros incríveis!  Fique por dentro das comunidades que vão participar, quais temas irão abordar e claro as datas e locais para você participar. 💥Esquentas TDC Innovation 2023: 24/05 - Esquenta TDC: Carreira e Desenvolvimento Presencial em Floripa das 19:00 as 21:30 com inscrição AQUI Comunidade: Google Developer...

JSON fácil em Java com GSon !

Ola pessoal ! O formato JSON ( J ava S cript O bject N otation) vem se consagrando cada vez mais na comunicação de dados, principalmente nos dispositivos móveis devido a esse formato ser mais leve que o XML e também mais legível. Uma prova disso são as inúmeras bibliotecas que existem para manipular esse formato, e no caso do Android, o suporte ao JSON é nativo. Mas apesar de ter esse suporte nativo, algumas operações devem ser feitas manualmente e o código acaba ficando um pouco verboso e repetitivo, já que para cada objeto que se deseja transmitir é necessário fazer um método que lê as propriedades do JSON e faz as devidas atribuições no seu objeto Java. Vamos supor o seguinte objeto sendo transmitido em JSON: {   user: {     id: 123456,     name: "Neto Marin",     username: "netomarin",     email: "netomarin@globalcode.com.br"   } } Se você fosse tratar um Webservice que envia esse JSON para o seu aplicativo Android...

JavaOne Brasil, dicas para submissão de palestras

Não quero parecer pretensiosa dando dicas para submissão de palestras para o JavaOne Brasil, mas sim repassar os tantos conselhos e sugestões recebidas pelos vetaranos do JavaOne: Bruno Souza e Leonardo Galvão que revisaram dezenas de submissões para o JavaOne e ajudaram a aprovar tantas palestras, e também misturar um pouco da minha experiência na seleção de palestras nos eventos realizados pela Globalcode e SouJava . 10 anos de JavaOne: http://www.globalcode.com.br/noticias/Globalcode10AnosNoJavaOne Os palestrantes ganham a entrada! A submissão pode ser feita em português! O passo mais importante para ser aprovado como palestrante no JavaOne é sem dúvida nenhuma submeter pelo menos uma palestra. Então, independente de qualquer coisa, participe, arrisque, divulgue.  Mas, se quiser aumentar as suas chances...   1) Leve a sério: peça para amigos fazerem uma leitura crítica do texto, e claro uma boa revisão ortográfica. 2) Submissão de várias palestras ou variações do ...