sábado, 14 de julho de 2018

Rumo ao Certificado Android: Broadcast Receiver

O que é?
Broadcast Receiver permite que o aplicativo obtenha os intents enviados pelo sistema. Por exemplo, quando um fone de ouvido é plugado, o sistema envia um Intent para os aplicativos indicando que o fone foi plugado. Esse intent pode ser capturado se o aplicativo possuir um Broadcast Receiver e tratar essa ação. Para obter um Intent específico, utiliza-se de um Intent Filter, para filtrar os intents.
Broadcaster Receivers podem ser estáticos ou dinâmicos.

Classe do Broadcast Receiver
Para criar uma classe para tratar os broadcast, devemos herdar BroadcastReceiver e sobrescrever o método onReceive como o código abaixo:

public class NomeBroadcasterReceiver extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent){

  }
}

Broadcast Receiver Estáticos
São definidos no manifestos e são executados SEMPRE que o sistema mandar um broadcast com a intent com filtro desejado. Deve-se tomar muito cuidado, pois muitas vezes é desnecessário esse tipo de aplicação e diminuir o desempenho do sistema.

Registro no Manifesto
Como um dos quatro componentes do Android, Broadcast Receiver devem ser registrados no manifest. O código se assemelha abaixo (neste caso, quando uma foto foi tirada):

<receiver android:name=".NomeBroadcasterReceiver">
  <intent-filter>
    <action android:name="com.android.camera.NEW_PICTURE" />
    <action android:name="android.hardware.action.NEW_PICTURE" />
    <data android:mimeType="image/*" />
  </intent-filter>
</receiver>

Broadcast Receiver Dinâmicos
Os broadcast receiver dinâmicos são registrados em tempo de execução das atividades, geralmente nos métodos onResume e onPause. No método onResume, nós instanciamos um IntentFilter e o Broadcast Receiver e usamos o método registerReceiver para registrá-los.
Em onPause, nós removemos o registro com o unregisterReceiver para evitar disparos fora da execução do aplicativo.

public class NomeActivity extends Activity{
   
   NomeBroadcasterReceiver receiver;

   @Override
   protected void onResume(){
      super onResume();
      IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
      receiver = new NomeBroadcasterReceiver();
      registerReceiver(receiver, receiverFilter);
   }

   @Override
   protected void onPause(){
      super.onPause();
      unregisterReceiver(receiver);
   }
}

Nenhum comentário:

Postar um comentário