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)
- GCM de Android (notificación push): el dispositivo no recibe notificación si se detiene la aplicación
- Diferencia entre BOOT_COMPLETED y QUICKBOOT_POWERON en Android
- ¿Cómo incluir un paquete adicional al probar emisiones de Android?
- BroadcastReceiver cuando la aplicación no se está ejecutando
- Java.lang.IllegalArgumentException: registra demasiados receptores de difusión
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 🙂
- El receptor de difusión tarda demasiado en recibir en onReceive () después de que el modo de avión esté apagado / encendido
- Android receptor SMS no funciona
- evitando un bloqueo cuando alguien monta una tarjeta SD de Android
- ¿Cómo pasar datos a BroadcastReceiver?
- PendingIntent obtener requestCode
- GCM BroadcastReceiver setResultCode uso
- El receptor de arranque no funciona
- Broadcast receptor onReceive () recibiendo llamadas varias veces
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"); } }
- Getbluetoothservice () llamado sin bluetoothmanagercallback
- Barra de herramientas de Android + Diseño de pestaña + Cajón, Ocultar barra de herramientas al desplazarse y llevar TabLayout a la parte superior