Как правильно кормить IP устройства в андроиде - PullRequest
0 голосов
/ 10 июля 2019

В данный момент я даю IP-адрес эмулятора вручную. Проведя некоторые исследования, я обнаружил, что если мое устройство подключено к Wi-Fi, я могу использовать следующий метод.

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

Но в моем случае он не подключен к Wi-Fi (подключен к локальной сети), как я могу это сделать в этом сценарии?

Это то, что у меня есть на данный момент. Я хочу, чтобы мое приложение автоматически выбирало свой IP-адрес.

String url = "0.0.0.0"; // emulator ip MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(url);

Ответы [ 2 ]

1 голос
/ 10 июля 2019
public String getLocalIpAddress() {
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()) {
                String ip = inetAddress.getHostAddress();
                Log.i(TAG, "***** IP="+ ip);
                return ip;
            }
        }
    }
} catch (SocketException ex) {
    Log.e(TAG, ex.toString());
}
return null;
}

с использованием getHostAddress: IP = fe70 :: 75ca: a16d: ea5a: .......

с использованием hashCode и Formatter вы получите фактический IP.

0 голосов
/ 10 июля 2019

Ответ от Варма Ланке работает отлично.Но он возвращает IP в обратном порядке.Чтобы решить эту проблему

Вместо этой строки

String ip = Formatter.formatIpAddress(inetAddress.hashCode());

Используйте это

String ip = inetAddress.getHostAddress();

Для получения более подробной информации,Посмотрите здесь Получение устройства Ip

...