sendbroadcast - programacion android pdf 2018
Mejores prácticas de Android para actualizar la interfaz de usuario de BroadcastReceiver a una determinada actividad (2)
Cuando tengo un broadcastReceiver, digo android.intent.action.MEDIA_BUTTON y quiero actualizar la interfaz de usuario de la actividad actual sin crear una nueva actividad, ¿hay alguna buena práctica en esta?
Lo que sé (podría no ser correcto)
1) Puedo poner BroadcastReceiver en la misma clase que la actividad y llamar a la función updateUI después de cierta actividad
2) Crea un ContentObserver?
3) Comuníquese a un servicio creado por la actividad, use aidl. (No sé cómo obtener el servicio actual si está registrado en una actividad)
4) Cree un filtro personalizado en el receptor de difusión ubicado en la misma clase que la actividad, y use context.sendBroadcast (mensaje de filtro personalizado) y en el filtro personalizado llame a updateUI (¿igual que uno pero más genérico?)
El flujo final es que vendría de un BroadcastReceiver y terminaría actualizando la UI sin renovar la actividad (a menos que la actividad esté muerta).
Por favor, proporcione enlaces / código fuente sobre cómo abordar este tipo de problema. Muchas gracias por adelantado :)
La forma más fácil de proporcionar esta funcionalidad es poner el receptor de difusión en su Actividad y vincularlo / desvincularlo usando registerReceiver y unregisterreceiver :
public class MyActivity extends Activity {
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
MyActivity.this.receivedBroadcast(intent);
}
};
@Override
public void onResume() {
super.onResume();
IntentFilter iff = new IntentFilter();
iff.addAction("android.intent.action.MEDIA_BUTTON");
// Put whatever message you want to receive as the action
this.registerReceiver(this.mBroadcastReceiver,iff);
}
@Override
public void onPause() {
super.onPause();
this.unregisterReceiver(this.mBroadcastReceiver);
}
private void receivedBroadcast(Intent i) {
// Put your receive handling code here
}
}
Según la intención que desee recibir, es posible que deba agregar los permisos adecuados a su archivo AndroidManifest.xml .
Lo que recientemente tuve que hacer para cambiar el texto de un Botón después de recibir datos de un LocalBroadcastManager es almacenar el valor en un campo privado y luego hacer las cosas de UI en mi método onResume ().
public class myClass extends Activity {
private String myString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// register to receive data
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter("myAction"));
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// get the extra data included in the intent
myString = intent.getStringExtra("myString");
}
};
@Override
public void onResume() {
super.onResume();
System.out.println("onResume");
// do something to the UI
myButton.setText(myString != null ? myString : "Default");
}
}