Reputation: 3876
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
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