Dos opciones
1) Si desea leer Broadcast solo cuando la Actividad está visible, entonces,
registerReceiver(...) en onStart()y unregisterReceiver(...)enonStop()
2) Si desea leer Broadcast, incluso si la Actividad está en segundo plano, entonces,
registerReceiver(...)dentro onCreate(...)y unregisterReceiver(...)dentroonDestroy()
Prima:
Si eres vago
Si no desea escribir código repetitivo para registrar y anular el registro de un BroadcastReceiver una y otra vez en cada Actividad, entonces,
- Crear una actividad abstracta
- Escribir código repetitivo en la actividad
- Deje la implementación como métodos abstractos.
Aquí está el fragmento de código:
Actividad abstracta
public abstract class BasicActivity extends AppCompatActivity {
private BroadcastReceiver broadcastReceiver;
private IntentFilter filter;
private static final String TAG = "BasicActivity";
/**********************************************************************
* Boilerplate code
**********************************************************************/
@Override
public void onCreate(Bundle sis){
super.onCreate(sis);
broadcastReceiver = getBroadcastReceiver();
filter = getFilter();
}
@Override
public void onStart(){
super.onStart();
register();
}
@Override
public void onStop(){
super.onStop();
unregister();
}
private void register(){
registerReceiver(broadcastReceiver,filter);
}
private void unregister(){
unregisterReceiver(broadcastReceiver);
}
/**********************************************************************
* Abstract methods
**********************************************************************/
public abstract BroadcastReceiver getBroadcastReceiver();
public abstract IntentFilter getFilter();
}
Con este enfoque, puede escribir más código repetitivo, como escribir animaciones comunes, vincular a un servicio, etc.
Ver código completo:
AQUÍ