0

こんにちは、Android デバイスの IP アドレスを取得するために以下のコードを使用しています。

private String returnIPAdrress()
        {
            String IPAddress = null;
            try
                {
                    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())
                                        {
                                            IPAddress = inetAddress.getHostAddress().toString();
                                        }
                                }
                        }

                }
            catch (SocketException ex)
                {
                    Log.e("ServerActivity", ex.toString());
                    return null;
                }
            return IPAddress;
        }

Galaxyタブレット(os = 2.3)でテストすると、正常に動作し、有効なIPアドレスが得られます。

エミュレーター(os = 2.2)でテストしたところ、IPアドレスが10.0.2.15として表示されますが、これも有効だと思います。

しかし、Micromax キャンバス (os=4.1) で実行すると、IP アドレスが fe80::d0b3:3fff:fe9d:f68c%p2p0として表示されますが、これは間違っています。

OSのバージョンが違うからでしょうか?

どうすればこれを解決できますか?

4

2 に答える 2

3

この方法を試してください:

public static String getIPAddress() {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress().toUpperCase();
                    boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    if (isIPv4 && intf.getDisplayName().startsWith("wlan")) {
                        return sAddr;
                    }
                }
            }
        }
    } catch (Exception ex) {
        return null;
    }
    return null;
}
于 2013-07-18T11:53:28.807 に答える