Названия сетевых интерфейсов для устройств Android

Возможно, я задаю неправильный вопрос, но я не могу найти то, что искал, поэтому попробую попросить его здесь вместо Google.

В принципе, у меня есть следующий код, из которого я могу почерпнуть, если я нахожусь на Wi-Fi, 3G или что-то еще (мошенничество приходит на ум).

    // 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 Tab, похоже, возвращается "eth0", когда вы подключены к WiFi и "pdp0" при подключении к 3G

Тем не менее, я действительно смог протестировать 1 x Galaxy S и 1 x Galaxy S Tab, поскольку они являются единственными устройствами Android, которые у меня есть. Я предполагаю, что имя сетевого интерфейса установлено где-то в ядре менеджером устройства. Возможно, я мог бы пробираться через ядро ​​для каждого устройства, но я решил, что кто-то должен был найти эту информацию уже, любые предложения о том, где искать или что искать в google?

Ответы

Ответ 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
   }      
}