Mejores prácticas de Android para actualizar la interfaz de usuario de BroadcastReceiver a una determinada actividad

Cuando tengo un broadcastReceiver decir android.intent.action.MEDIA_BUTTON y quiero actualizar la IU de la actividad actual sin crear una nueva actividad, ¿hay alguna buena práctica en esta?

Lo que sé (puede no ser correcto)

1) Puedo poner el BroadcastReceiver en la misma clase que la actividad y llamar a la función updateUI después de cierta actividad

2) ¿Crear un ContentObserver?

3) Comunicarse con un servicio creado por la actividad, use aidl. (No sé cómo obtener el servicio actual si está registrado de una actividad)

4) Cree un filtro personalizado en el broadcastReceiver ubicado en la misma clase que la actividad, y use context.sendBroadcast (msg del filtro personalizado) y en el filtro personalizado updateUI (igual que uno pero más genérico?)

El flujo final es que vendría de un BroadcastReceiver y termina actualizando la interfaz de usuario sin renovar la actividad (a menos que la actividad está muerta?)

Por favor, proporcione enlaces / código fuente en su forma de abordar este tipo de problema. Muchas gracias por adelantado 🙂

La forma más sencilla de proporcionar esta funcionalidad es poner el receptor de radiodifusión en su actividad y enlazarlo / 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 } } 

Dependiendo de la intención que desea recibir, es posible que tenga que 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 la interfaz de usuario 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"); } } 
  • Android IntentService no puede instanciar clase; Sin constructor vacío
  • ¿Necesito anular el registro de 'anonymous' BroadcastReceiver
  • Escuchar el acceso a la ubicación desactivar / activar en la configuración
  • Cómo crear BroadcastReceiver sin actividad
  • Android - ¿Cómo activar un Broadcast Receiver para llamar a su método onReceive ()?
  • Cómo recibir una emisión cuando la aplicación se instala o se elimina
  • Receptores de difusión en Delphi XE5 Android
  • ¿Cómo enviar sms al apagar el teléfono en android?
  • Permiso personalizado con intención implícita
  • BroadcastReceivers en ICS
  • Llamar un método de actividad de BroadcastReceiver en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.