Pregunta

Soy nuevo en el desarrollo de Android y trabajando en una aplicación para Android que requiere que el teléfono esté conectado a Internet, ya sea a través de WiFi, EDGE o 3G.

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 ejecute la versión 1.5 de Android 3G cuando está activado, pero se bloquea cuando desactivo la conexión 3G. Mi solicitud de una excepción de puntero nulo cuando llamo isConnectedOrConnecting (). Lo mismo ocurre también en mi HTC Desire con Android 2.1.

La esperanza de que alguien sabe la solución a esto.

Gracias de antemano!

¿Fue útil?

Solución

Si el accidente es directamente en su línea:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

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

Otros consejos

Me escribió 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 ...

Para comprobar Internet está allí o no se pueden comprobar solamente en el dispositivo ...... El emulador puede que no funcione .... Tengo el siguiente código y su trabajo al 100% 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;
           }
        }

}

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;
                  }

      }

usar esto para 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);      
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top