2

コードを使用して、デバイスが使用している IPv4 アドレスを取得しています。

public static String getIPAddress(boolean useIPv4) {
    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 (useIPv4) {
                        if (isIPv4) 
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 port suffix
                            return delim<0 ? sAddr : sAddr.substring(0, delim);
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

私の Samsung Galaxy Express は WiFi に接続されており、セルが有効になっている SIM カードがあります。

上記のコードから返される IP は、電話がセル信号を使用していることを示す 10. アドレスであり、ネットワークから利用可能な 192. アドレスを使用する必要がある場合です。

上記のコードを変更して 192. を選択する方法はありますか? それとも、これは故障している電話ですか?

モバイルネットワークを無効にしたり、機内モードにしたりしてみました。

機能した唯一のことは、SIMカードを取り外すことでした!! 内部アドレスを取得するためだけにユーザーがこれを行うとは期待できませんか?

ありがとう

4

1 に答える 1

3

何か良い方法があれば教えて頂きたいです...。

しかし今のところ、「wlan0」アドレスを探してください。また、以下のコードはループバック アドレスを除外します。

List<NetworkInterface> interfaces;
try {
    interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
    for (NetworkInterface ni : interfaces)
    {
        if ((ni.isLoopback() == false) && ni.isUp() && (ni.getName().equals("wlan0")))
        {

            // enumerate ip addresses on this network interface (e.g. ni.getInetAddresses()

            // return the first one that is is Ipv4

        }
    }

上記のコードを android.net.ConnectivityManager の呼び出しと組み合わせて、Wi-Fi に接続していることを確認する必要があります。

于 2014-01-10T19:22:41.933 に答える