OkyDokyman
OkyDokyman

Reputation: 3876

android internet connection

I am using the following code to see if user have internet connection (WIFI or 3G or Edge). Why does some users get "No internet connection" when they do have it?

try{
  ConnectivityManager connec =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            State wifi = connec.getNetworkInfo(1).getState();

  if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || 
    wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING ) {
    ///HAVE CONNECTION CODE////
            }else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||   connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED   ) {
    ///NO CONNECTION CODE///
  }
} catch (Throwable t){
///NO CONNECTION CODE///
}

Upvotes: 0

Views: 1162

Answers (1)

Squonk
Squonk

Reputation: 48871

My guess would be that connec.getNetworkInfo(0) and connec.getNetworkInfo(1) aren't always valid for the wifi/3g network interfaces. Try checking the 'TypeName' of the interfaces. I use this code...

public boolean HaveNetworkConnection() {
    boolean HaveConnectedWifi = false;
    boolean HaveConnectedMobile = false;

    ConnectivityManager connManager = (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = connManager.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        Log.d("HaveNetworkConnection()", ni.toString());
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                HaveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                HaveConnectedMobile = true;
    }
    return HaveConnectedWifi || HaveConnectedMobile;
}

Upvotes: 1

Related Questions