2011-08-10 143 views
3

也許我問的是錯誤的問題,但我似乎無法找到我在找什麼,所以我會試着在這裏問它而不是谷歌。Android設備的網絡接口名稱

基本上,我有以下代碼,從中我可以收集如果我在無線上,3G或其他東西(tethering想到)。

// 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(); 
       } 
      } 
     } 

我相信這裏的重要組成部分,是sInterfaceName = intf.getName();

現在在Galaxy S和Galaxy S的標籤,這似乎當連接到3G時,您連接到WiFi和「pdp0」返回「的eth0」這就是說,我真的只能測試1個Galaxy S和1個Galaxy S Tab,因爲他們是我唯一的Android設備。我想象網絡接口名稱是由設備管理器在內核的某個地方設置的。我可能會通過內核爲每個設備,但我覺得有人必須已經找到這個信息了,有什麼建議在哪裏尋找或搜索谷歌?

回答

1

你應該使用更簡單的方法。致電ConnectivityManager的功能返回當前活動網絡 - getActiveNetworkInfo()。有一個NetworkInfo的實例,您可以撥打getType()getSubtype()來獲取當前正在使用的網絡類型。


下面是一個例子:

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

有用,但不回答這個問題。他想要接口的名稱,而不是當前的網絡類型。 – Andy