¿Cómo puedo enviar los datos de resultado del Receptor de Broadcast a la Actividad

Tengo una Actividad que llama a un Receptor Broadcast. El Receptor de Radiodifusión espera y escucha el GPS. Cuando el oyente recibe el nuevo punto, quiero enviar ese nuevo punto a Actividad. ¿Cómo puedo enviar datos desde el Receptor a la Actividad?

Necesito un oyente en mi Actividad esperando respuesta de Broadcast Receiver. ¿Cómo puedo hacer eso?

Puede llamar al receptor de su actividad. Si no desea agregar la lógica del receptor en su actividad, puede utilizar un receptor abstracto.

Usted receptor abstracto:

public abstract class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //Add you receiver logic here ... ... onNewPosition(); } protected abstract void onNewPosition(); } 

En su actividad:

 public class MyActivity extends Activity { private smsReceiver smsReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_one_position); smsReceiver = new smsReceiver() { // this code is call asyncrously from the receiver @Override protected void onNewPosition() { //Add your activty logic here } }; IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); intentFilter.setPriority(999); this.registerReceiver(smsReceiver, intentFilter); } @Override protected void onPause() { super.onPause(); this.unregisterReceiver(this.smsReceiver); } } 

Espero que te ayude…

Usted tiene un par de maneras de hacerlo y varias consideraciones.

  1. Puede hacer sondeos, lo que significa comprobar cada ahora una vez más utilizando el controlador o temporizador para ver si la información ha llegado.

  2. Puede registrar el receptor de difusión como una clase interna de su actividad y, a continuación, puede llamar a métodos en su activty.

  3. Puedes enviar la Intención de Envío a tu clase con la información, pero si tu actividad no está en primer plano, puedes llevarla allí, y eso no es 100% lo que quieres …

En cuanto a alguna consideración, BroadCastReciver se utiliza principalmente como un oyente, no notider así que la clase interna, es la mejor práctica, en mi opinión, para su uso con las actividades, para los servicios se puede utilizar como una clase independiente y registrarlo en el Manifest.xml. .. Ahora tienes que recordar que cuando la transmisión se está transmitiendo su actividad podría estar inactiva debido a la orientación de cambio o evento que pausas su aplicación para que pueda perder el evento. No escucho los eventos del sistema, sino a mis propios eventos, así que utilizo una emisión pegajosa para evitar ese problema.

Definí un oyente para mi receptor y lo uso en actividad y está funcionando perfecto ahora. ¿Es posible que ocurra algún problema más tarde?

 public interface OnNewLocationListener { public abstract void onNewLocationReceived(Location location); 

}

En Mi clase de receptor que recibe el nombre de ReceiverPositioningAlarm:

 // listener ---------------------------------------------------- static ArrayList<OnNewLocationListener> arrOnNewLocationListener = new ArrayList<OnNewLocationListener>(); // Allows the user to set an Listener and react to the event public static void setOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.add(listener); } public static void clearOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.remove(listener); } // This function is called after the new point received private static void OnNewLocationReceived(Location location) { // Check if the Listener was set, otherwise we'll get an Exception when // we try to call it if (arrOnNewLocationListener != null) { // Only trigger the event, when we have any listener for (int i = arrOnNewLocationListener.size() - 1; i >= 0; i--) { arrOnNewLocationListener.get(i).onNewLocationReceived( location); } } } 

Y en uno de los métodos de mi actividad:

 OnNewLocationListener onNewLocationListener = new OnNewLocationListener() { @Override public void onNewLocationReceived(Location location) { // do something // then stop listening ReceiverPositioningAlarm.clearOnNewLocationListener(this); } }; // start listening for new location ReceiverPositioningAlarm.setOnNewLocationListener( onNewLocationListener); 

Basta con implementar el receptor de difusión en la actividad. Registre el receptor con el contexto de la actividad.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.