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