sábado, 21 de abril de 2018

O uso do BroadcastReceivers no Android

Hoje em um projeto me deparei com uma situação bem comum, como passar minhas ações e variáveis de um serviço para a MainActivity.

Sempre nos deparamos com essa situação e muita gente não sabe ou não conhece um recurso muito interessante, que são os BroadcastReceivers. uma forma simples de se comunicar entre Activity's, que pode resolver sua vida...kk

Primeiramente devemos criar uma constante de registro, em MainActivity criei a constante:

public static final String ACTION_STOP = "br.com.marcelzisse.ACTION_STOP";
//Substituindo pelo package da sua aplicação

para que possamos referencia-la em nosso service.
Toda vez que chamamos esse receiver, temos um Listener que irá monitorar e efetuar uma ação
Para receber as ações do BroadcastRegister, temos que registrar uma variavel, que (não esqueçam), devem ser desativadas sempre no nosso OnDestroy
usei o seguinte código para registrar o BroadcateReceiver:

private BroadcastReceiver stop = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (serviceBound) stopAudio();
//após o registro esse código será executado } };

juntamente com:

private void registerStop() { //Register playNewMedia receiver
IntentFilter filter = new IntentFilter(MediaPlayerService.ACTION_STOP); context.registerReceiver(stop, filter); }

adicione no Oncreate da Activity:

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
...
registerStop(); }

e no onDestroy:

@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(stop); }

Dessa forma podemos receber todas as acões direcionadas a esse Receiver inclusive trocar informações entre aplicações....muito interessante não é?

Mas e para chamar esse receiver e enviar minhas variáveis?
Eu utilizei esse código que me atendeu muito bem:

private void stopAction(){ Intent stop = new Intent(MediaPlayerService.ACTION_STOP); sendBroadcast(stop); }

E no caso de passar alguma informação adicionamos a seguinte linha antes do sendBroadcast:

stop.putExtra("variavel ou objecto",Object/Var);

Fácil não é, espero que essa informação seja útil pra vcs como foi pra mim....

Até a próxima.