2012-09-24 16 views
5

Duplicar posibles:
How can I monitor the network connection status in Android?enfoque eficiente para comprobar continuamente si la conexión a Internet está disponible en Android

Tengo que comprobar continuamente si internet está conectado o no y actualizar el área de texto de acuerdo con el mensaje apropiado. Ahora si creo un asynctask se ejecutará una vez y se detendrá, que no es lo que quiero. Quiero comprobar en todo momento continuamente y, obviamente, esto no debería estar en el hilo principal. Por lo tanto, Servicio tampoco será una buena opción. ¿Alguien puede ayudarme? ¿Cuál es el enfoque mejor y más eficiente para manejar esto? Gracias

+2

Por qué ¿necesitas hacer esto? –

Respuesta

7

hazlo con un receptor. puede recibir una notificación sobre el cambio de estado de la red. por ejemplo,

private BroadcastReceiver networkReceiver = new BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      // we're connected 
     } 
    } 
    // we're not connected 
    } 
} 

registro de esto en su onResume(), y anular el registro en onPause().

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(networkReceiver); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(networkReceiver, filter); 
} 

, además, para obtener el estado inicial antes de que su receptor se ha registrado, llame a esto en su método de onResume(),

public boolean isNetworkConnected() { 
     ConnectivityManager cm = 
      (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 

asegúrese de que sus solicitudes de aplicaciones de este permiso,

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Cuando enciendo y apago mi wifi El receptor de difusión no funciona. El código de Onresume funciona perfectamente, pero el receptor de la transmisión no me notifica ningún cambio. alguna ayuda ? – Vyper

+0

¡Acabo de descifrar el error, gracias! – Vyper

+0

@jeffrey hey, verifico la conexión a internet usando su código. Pero dando error en el método orResume() .. registerReceiver (networkReceiver); en este método registerReceiver pide 2 parámetros. 1 para el objeto receptor de difusión y @ para el filtro de intención. ¿Por qué paso insted de 2? – Google

2

No necesita preguntar constantemente al sistema operativo si hay una conexión de red. Simplemente compruebe si existe una conexión en onResume() y luego use un BroadcastReceiver para escuchar la intención CONNECTIVITY_ACTION del ConnectivityManager cuando se cambie la conexión y marque EXTRA_NO_CONNECTIVITY.

Cuestiones relacionadas