2011-11-08 7 views
0

ここで、AndroidタブレットのIPアドレスの取得に関する問題に直面しています。AndroidタブレットIPアドレス

私はタブレットのIPアドレスのために次のコードを一般的な方法で使用しています。

for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
        InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 

inetAddress.getHostAddressは()方法は、ASのIPアドレスを返すFE80 :: 9a4b:4aff:FE00:異なるフォーマットではなく122.xx.xxx.xxx 形式で、a6e1 。

Wifimanagerクラスを使用してタブレットのIPアドレスを取得すると、122.xx.xxx.xxxがこの形式で返されます。

しかし、一般的な方法を使用して、私はそれが間違ったフォーマットとして与える理由を知らない。

この問題でお手伝いしてもらえますか...

ありがとうございます。

+0

私はアンドロイドAPIについてよく分かりませんが、AFAIK、fe80 :: 9a4b:4aff:fe00:a6e1は大きすぎてIPアドレスではありません。間違った方法を使っているようです。 – ArjunShankar

答えて

0

fe80::9a4b:4aff:fe00:a6e1はまったく間違っていません。これはちょうど新しいスタイルのIPv6です。

新しいappliactionsは常に両方の形式で動作するように設計する必要があります。

0

これはIPv6アドレスです。 wikipedia articleをご覧ください。 IPv6アドレスをIPv4アドレス(xxx.xxx.xxx.xxx)に変換することは可能ですが、保証されていません。

+0

返信のためのThnaks。 IP6をIP4に変換しようとします。変換されたIPがIPアドレスと一致しない場合は、WifiManagerクラスの戻り値と一致しません。 – PoornaDroid

0

/*利用可能なネットワークインターフェイスを調べて、最初の "まともな" IPv4アドレスを選択します。 *エミュレータはデフォルトで10.0.2.15を使用しているため、より良いものがない場合にのみ使用してください。 */

public String getMyIp() { 
     Set<String> eligible = eligibleIpAddresses(); 

/* For the emulator, prefer an IP address other than 10.0.2.15 (default emulator address) 
      * but use it if it is the only one. */ 
     if (eligible.size() > 1) { 
      eligible.remove("10.0.2.15"); 
      return eligible.iterator().next(); 
     } else if (eligible.size() == 1) { 
      return eligible.iterator().next(); 
     } else { 
      Log.w("Using local IP address, no external objects will be discovered","---"); 
      return "127.0.0.1"; 
     } 
    } 

    public static Set<String> eligibleIpAddresses() { 
     Set<String> eligible = new HashSet<String>(); 
     try { 
      Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); 
      while (netInterfaces.hasMoreElements()) { 
       NetworkInterface ni = netInterfaces.nextElement(); 
       Enumeration<InetAddress> address = ni.getInetAddresses(); 
       while (address.hasMoreElements()) { 
        InetAddress addr = address.nextElement(); 
        if (!addr.isLoopbackAddress() && !(addr.getHostAddress().indexOf(":") > -1)) { 
         eligible.add(addr.getHostAddress()); 
        } 
       } 
      } 
     } catch (Exception e) { 
     } 
     return eligible; 
    }