2010-05-02 7 views
16

Je suis nouveau sur le développement Android et travaille sur une application Android qui nécessite que le téléphone soit connecté à Internet, via Wifi, EDGE ou 3G.Problème de vérification de connectivité Internet Android

Voici le code que j'utilise pour vérifier si une connexion Internet est disponible

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

J'ai aussi définir ces autorisations dans le fichier manifeste

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

Cela fonctionne très bien dans l'émulateur exécutant la version 1.5 d'Android lorsque la 3G est activée, mais il se bloque lorsque je désactive la connexion 3G. Mon application renvoie une exception de pointeur NULL lorsque j'appelle isConnectedOrConnecting(). La même chose se passe aussi sur mon HTC Desire sous Android 2.1.

Espérons que quiconque connaisse la solution à ce problème.

Merci d'avance!

Répondre

25

Si l'accident est directement sur votre ligne:

return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

alors cela signifie getActiveNetworkInfo() retourné null, parce qu'il n'y a pas de réseau actif - dans ce cas, votre méthode isConnected() doit retourner false.

+0

Doh, c'est quelque chose que j'aurais dû voir. Merci. – Charles

+6

Ouais, eh bien, ça aiderait si la documentation de 'getActiveNetworkInfo()' existait réellement. :-) – CommonsWare

+0

aidez \ nvous avez collé toute la fonction mais leur ligne rouge se trouve sous getsystemservice ... et eclipse ne fournit aucune suggestion .. s'il vous plaît suggérer une solution sur la façon de vérifier la connectivité Internet – Sourabh

8

j'ai écrit cette méthode pour gérer cela:

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

Une façon de le faire, je suppose ...

+9

Qu'en est-il de: return (ni! = Null && ni.isAvailable() && ni.est connecté()); : P –

4

Pour vérifier Internet est là ou ne peut pas être vérifiée uniquement sur l'appareil .... ..On émulateur, il ne fonctionne pas .... J'ai le code suivant & son 100% travaillant sur appareil Android ..... :)

@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

même que ci-dessus :) –

+0

Salut - pourquoi dites-vous qu'il peut ne pas fonctionner sur l'émulateur? – ostergaard

-2

Utilisez cette option pour detemine si connceted au wifi/3g:

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

et cela pour permettre wifi vous:

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

La moitié manquante. –

1

Vous avez utilisé cet extrait.

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() ne fonctionnera pas AUSSI BIEN. (dans Android 2.3) –

Questions connexes