2011-08-10 4 views
3

Peut-être que je pose la mauvaise question, mais je n'arrive pas à trouver ce que je cherche, alors je vais essayer de le demander ici au lieu de google.Noms d'interface réseau pour les appareils Android

Fondamentalement, j'ai le code suivant, à partir de laquelle je peux glaner si je suis sur le wifi, 3G ou autre chose (attachement vient à l'esprit).

// Iterate over all network interfaces. 
    for (Enumeration<NetworkInterface> en = 
     NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) 
     { 
      NetworkInterface intf = en.nextElement(); 
      // Iterate over all IP addresses in each network interface. 
      for (Enumeration<InetAddress> enumIPAddr = 
       intf.getInetAddresses(); enumIPAddr.hasMoreElements();) 
      { 
       InetAddress iNetAddress = enumIPAddr.nextElement(); 
       // Loop back address (127.0.0.1) doesn't count as an in-use 
       // IP address. 
       if (!iNetAddress.isLoopbackAddress()) 
       { 
        sLocalIP = iNetAddress.getHostAddress().toString(); 
        sInterfaceName = intf.getName(); 
       } 
      } 
     } 

je crois que la partie importante ici est sInterfaceName = intf.getName();

maintenant sur le Galaxy S et Galaxy Tab S, cela semble revenir « eth0 » lorsque vous êtes connecté au WiFi et « pdp0 » lorsqu'il est connecté à la 3G Cela dit, je n'ai vraiment été capable de tester avec 1 x Galaxy S et 1 x Galaxy S Tab car ils sont les seuls appareils Android que j'ai. J'imagine que le nom de l'interface réseau est défini quelque part dans le noyau par le gestionnaire de périphériques. Je pourrais probablement troller à travers le noyau pour chaque appareil, mais j'ai pensé que quelqu'un devait avoir déjà trouvé cette information, des suggestions sur où chercher ou quoi chercher dans google?

Répondre

1

Vous devriez utiliser une approche plus facile. Appelez la fonction ConnectivityManager qui renvoie le réseau actif actuel - getActiveNetworkInfo(). Si vous possédez une instance de NetworkInfo, vous pouvez appeler le getType() et le getSubtype() pour obtenir le type de réseau actuellement utilisé.


est un exemple:

NetworkInfo info = m_connectivityManager.getActiveNetworkInfo(); 
int netType = info.getType(); 
int netSubtype = info.getSubtype(); 

if (netType == ConnectivityManager.TYPE_WIFI || netType == ConnectivityManager.TYPE_WIMAX) 
{ 
    //no restrictions, do some networking 
} 
else if (netType == ConnectivityManager.TYPE_MOBILE && 
    netSubtype == TelephonyManager.NETWORK_TYPE_UMTS) 
{ 
    //3G connection 
    if(!m_telephonyManager.isNetworkRoaming()) 
    { 
     //do some networking 
    }  
} 
+4

utiles, mais ne répond pas à la question. Il veut le nom de l'interface, pas le type de réseau actuel. – Andy

Questions connexes