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Í