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.
Quelle est l'utilisation de sb ici? –
@niteshgoel C'est pour la journalisation qui a été éditée. – KickingLettuce
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