Названия сетевых интерфейсов для устройств 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
}
}