web-dev-qa-db-ja.com

AndroidでデバイスがWiFiに接続されているときにセルラーネットワークのIPアドレスを取得する方法

Androidで同時にWiFiとセルラーネットワークの両方のIPアドレスを取得できる方法があります。多くの例を使用してみましたが、セルラーネットワークではなくWiFiネットワークのみのアドレスを取得できました。 WiFiとセルラーネットワークの両方を有効にしましたが、デバイスはWiFi経由でインターネットにアクセスできます。

IPアドレスを取得するために使用しているコードは次のとおりです。

    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();
                    Log.i("Here is the Address",ipAddress);
                }
            }
        }
    } catch (SocketException ex) {

    }

デバイスがWiFiに接続されているときにセルラーネットワークのIPアドレスを取得することは可能ですか?.

16
Asus gates

デバイスでWiFiを有効にし、WiFiネットワークへのアクティブな接続があるときは、手動で有効にしたかどうかに関係なく、モバイルデータは一時的に無効になりますか否か。 [モバイルデータのオン/オフ]設定は、アクティブなWiFi接続がない場合にのみ考慮されます。

一部のカスタムROMには、WiFiへの接続時にモバイル接続を維持するオプションがあります(したがって、WiFi接続が失われた場合、モバイルへの切り替えが速くなります)が、それでもWiFi接続が使用されます。

結論: WiFiとモバイルネットワークの両方をオンにすることはできないため、両方のIPアドレスを取得することはできません(できれば、WiFiのみをアクティブに使用します)

11
Aenadon

これを試してみると役立つかもしれません.....

モバイルIPアドレスの場合.....

 public static String getMobileIPAddress() {
        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()) {
                        return  addr.getHostAddress();
                    }
                }
            }
        } catch (Exception ex) { } // for now eat exceptions
        return "";
    }

Wifi IPアドレスの場合...

  public String getWifiIPAddress() {
        WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        int ip = wifiInfo.getIpAddress();
        return  Formatter.formatIpAddress(ip);
    }

この許可をメニフェストに含めてください....

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />

このように使用します....

String wifiIp = getWifiIPAddress(); 
String mobileIp = getMobileIPAddress();

このような出力が得られます......

o

デバイスのIPアドレスを取得する方法 の重複

7
sushildlh

Javaコードで次を使用します。

    WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
String ipAddress = Formatter.formatIpAddress(ip);

Androidマニフェストファイルにこの権限を追加することを忘れないでください:
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />

ソース: Get Wifi IP Address

それが役に立てば幸い!幸運を!

3
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
3

Wi-Fiが有効で接続されている場合、セルラー接続のIPは取得されません。これは、システムがバッテリー節約の理由でセルラーデータ接続を使用しないためです。両方を同時に有効にできますが、システムは一度に1つしか使用しません。どちらも許可されていますが、使用されるのは1つだけです。

私が考えることができる唯一の例があります:それはあなたがインターネットにアクセスしていないネットワークに無線LANを介して接続されている場合、あなたの携帯電話も携帯電話を介して接続します。

1
Raphau