2010-05-02 13 views
16

Soy nuevo en el desarrollo de Android y trabajo en una aplicación de Android que requiere que el teléfono esté conectado a Internet, ya sea a través de Wifi, EDGE o 3G.Problema de comprobación de conectividad a Internet con Android

Este es el código que estoy usando para comprobar si una conexión a Internet está disponible

public static boolean isConnected() 
{ 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

También he establecer estos permisos en el archivo de manifiesto

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

Esto funciona bien en el emulador que ejecuta la versión 1.5 de Android cuando 3G está habilitado, pero se bloquea cuando desactivo la conexión 3G. Mi aplicación arroja una excepción de puntero nulo cuando llamo a isConnectedOrConnecting(). Lo mismo ocurre en mi HTC Desire con Android 2.1.

Espero que alguien sepa la solución a esto.

¡Gracias de antemano!

Respuesta

25

Si el accidente es directamente en su línea:

return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

entonces eso significa getActiveNetworkInfo() regresaron null, porque no hay una red activa - en ese caso, el método debe devolver isConnected()false.

+0

Doh, esto es algo que debería haber visto. Gracias. – Charles

+6

Sí, bueno, ayudaría si realmente existiera la documentación para 'getActiveNetworkInfo()'. :-) – CommonsWare

+0

help \ ni ha pegado toda la función, pero su línea roja está en getsystemservice ... y eclipse no proporciona ninguna sugerencia ... sugiera alguna solución sobre cómo verificar la conectividad a Internet – Sourabh

8

escribí este método para manejar esto:

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo ni = cm.getActiveNetworkInfo(); 
    if (ni!=null && ni.isAvailable() && ni.isConnected()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

Una forma de hacerlo supongo ...

+9

Qué tal: return (ni! = Null && ni.isAvailable() && ni.está conectado()); : P –

4

Para comprobar Internet está allí o no se puede comprobar sólo en el dispositivo .... ..en emulador puede que no funcione .... tengo el siguiente código & su 100% de trabajo en el dispositivo androide ..... :)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView)findViewById(R.id.txt); 
    b = checkInternetConnection(); 


    if(b!=true) 
    { 
     tv.setText("net is not dr......."); 
    } 
    else 
    { 
     tv.setText("net is dr......."); 
    } 

} 
//Check weather Internet connection is available or not 
public boolean checkInternetConnection() { 
      final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE); 
      if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) { 
       return true; 
      } else { 
       System.out.println("Internet Connection Not Present"); 
       return false; 
      } 
     } 

}

+0

igual que arriba :) –

+0

Hola - ¿por qué dices que puede no funcionar en el emulador? – ostergaard

-2

uso esto a detemine si connceted a Wi-Fi/3G:

is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected(); 
    isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected(); 
    network = is3g||isWifi; 

y esto para activar wifi a sí mismo:

WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE); 
        wifiManager.setWifiEnabled(true);  
+0

Falta la mitad. –

1

Ha utilizado este fragmento.

ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 

     } 
+0

getAllNetworkInfo() no funcionará TAMBIÉN. (en Android 2.3) –

Cuestiones relacionadas