2014-07-14 3 views
0

Mon application vérifie la connexion réseau au démarrage. Dans les versions Android 2.3 à 4.4 la méthode ci-dessous fonctionne très bien (émulateur ou périphérique réel). Sur l'émulateur de prévisualisation Android L, la méthode revient false.ConnectivityManager dans Android L Aperçu

Voici mon code:

// =============================================================== 
public static boolean haveNetworkConnection(Context ctx) { 

    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 
    boolean haveConnectedEthernet = false; 

    ConnectivityManager cm = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 

    for (NetworkInfo ni : netInfo) { 

     // String con = ni.isConnected() ? "Connected" : "Not Connected"; 

     if (!haveConnectedWifi) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
     } 

     if (!haveConnectedMobile) { 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 

     if (!haveConnectedEthernet) { 
      if (ni.getTypeName().equalsIgnoreCase("ETHERNET")) 
       if (ni.isConnected()) 
        haveConnectedEthernet = true; 
     } 

     StringBuilder sb = new StringBuilder(); 
     sb.append(ni.getTypeName()).append(" ").append(ni); 


    } 
    return haveConnectedWifi || haveConnectedMobile 
      || haveConnectedEthernet; 
} 

Il y a quelques trucs StringBuilder bizarre, je n'ai pas créé ce code - il est dans un projet que je hérité. Je n'ai pas besoin de changer quoi que ce soit puisque ça marche. Est-ce que quelqu'un sait s'il y a des changements API avec la façon dont ConnectivityManager fonctionne? J'ai vérifié les changements API overview sur le dev site mais je n'ai vu aucune information pertinente à ce sujet.

+0

Quelle est l'utilisation de sb ici? –

+0

@niteshgoel C'est pour la journalisation qui a été éditée. – KickingLettuce

+1

Il n'y a pas d'API stable pour les noms de types. Commencez par modifier cela pour utiliser NetworkInfo.getType() et vérifier les constantes ConnectivityManager.TYPE_ *. – alanv

Répondre

1

Typename a été modifié dans L, par exemple devrait vérifier "Cellular" au lieu de "MOBILE".

Questions connexes