2011-08-10 21 views
3

多分私は間違った質問をしているかもしれませんが、私が探しているものを見つけることができないので、私はここでGoogleの代わりにそれを試してみます。Androidデバイスのネットワークインターフェイス名

基本的には、次のコードを持っています.Wifi、3G、または何か他のもの(テザリングが気になる)であれば、私は拾うことができます。

私はここで重要な部分は、ギャラクシーSとギャラクシーSのタブの上に今 sInterfaceName = intf.getName();

で3Gに接続するときには、無線LANと「pdp0」に接続されている場合、これは「eth0を」を返すように見えると信じて

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

私は実際には1 x Galaxy Sと1 x Galaxy S Tabでしかテストできませんでした。私はネットワークインターフェース名がデバイスマネージャーによってカーネルのどこかに設定されていると思います。私はおそらく、各デバイスのカーネルをめぐることができるかもしれませんが、誰かがこの情報を既に見つけたに違いないと思っています。

答えて

1

あなたは簡単にアプローチする必要があります。 ConnectivityManagerの関数を呼び出すと、現在アクティブなネットワーク-が返されます。 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