studio sendbroadcast programacion móviles ejemplos desarrollo curso aplicaciones android android-activity broadcastreceiver

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"); } }