2011-07-30 13 views
5

Tengo una actividad que muestra algunos datos obtenidos del servidor. Si no hay conexión disponible, la actividad muestra algunos datos en caché; si la conexión está disponible, la actividad obtiene datos y los muestra. Todo funciona como se esperaba
Ahora, me gustaría hacer que mi actividad vuelva a cargar los datos tan pronto como se produzca la conexión. Estoy utilizando un receptor simple que se extiende la BroadcastReceiver:android se comunica entre la actividad y el receptor de difusión

public class ConnectionChangeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
     if (activeNetInfo != null) { 
      //what to do here? 
     } 
    } 
} 

Receptor de radio se declara en mi archivo de manifiesto de la siguiente manera:

<receiver android:name=".ConnectionChangeReceiver" 
      android:label="NetworkConnection"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter> 
</receiver> 

En mi actividad, registro del receptor:

ConnectionChangeReceiver receiver = nuevo ConnectionChangeReceiver(); this.registerReceiver (receptor, nuevo IntentFilter (ConnectivityManager.CONNECTIVITY_ACTION));

Ahora, estoy confundido como qué hacer a continuación. Cuando se ejecuta el método onReceive, ¿cómo hacer que mi actividad sea consciente de eso? Sé que podría comenzar una nueva actividad, pero eso no es realmente lo que quiero. ¿Debo declarar ConnectionChangeReceiver como una clase privada de mi actividad? ¿O hay alguna otra solución?

+1

cree la clase ConnectionChangeReceiver dentro de la actividad que desea conocer de las conexiones, dentro de Receive, actualice las partes de la interfaz de usuario después de recibir la señal de conectividad. – sat

Respuesta

11

Creo que construir el receptor como una subclase privada de su actividad es el camino a seguir aquí. De esta forma puede controlar eventos y datos de su actividad. Luego puede crear una instancia y registrar el receptor del código como lo hizo anteriormente.

Tenga en cuenta que no tiene que registrar su receptor tanto en el manifiesto como en el código. Uno de ellos es enugh: el manifiesto es básicamente un registro "estático", mientras que hacerlo en código permite el registro dinámico en tiempo de ejecución. Además, cuando se registra en el manifiesto, se creará automáticamente una nueva instancia de su receptor desde el sistema, se ejecutará y terminará. Hacer el registro en el código permite apuntar a una instancia específica.

+0

muchas gracias por la aclaración. – Maggie

+0

+1 Gracias por aclarar. – AgentKnopf

+0

, pero ¿qué pasa si no quiero poner en funcionamiento el receptor de difusión ... ?? cualquier otra forma de hacer esto ... ?? –

Cuestiones relacionadas