Як отримати IP-адресу емулятора Android?


75

Я хочу отримати за допомогою коду IP-адресу емулятора Android, що працює зараз . Як цього можна досягти?


1
Можливо, пов’язані тут і тут .
hhh

@hhh Друге посилання порушено. :)
Мухамед Гусейбашич

1
@ MuhamedHuseinbašić Я вважаю, що ця тема вирішила проблему у другій темі, тому вирішила її видалити, щоб зробити речі простішими.
hhh

Відповіді:


159

Тільки для уточнення: у своєму додатку ви можете просто назвати емулятор `` localhost '' або 127.0.0.1.

Веб-трафік направляється через вашу розробницьку машину, тому зовнішній IP емулятора - це будь-який IP, призначений цій машині вашим постачальником. До машини розробника завжди можна отримати доступ із вашого пристрою на 10.0.2.2.

Оскільки ви запитували лише про IP- адресу емулятора , що ви намагаєтесь зробити?


8
Я хочу за це висловити 100 разів. Я не міг зрозуміти, як мій додаток може розмовляти з іншим локальним сервером, на якому я працював, поки не прочитав вашу публікацію. Дякую!
Спайк

Як ви можете досягти своєї машини розробки з 10.0.2.2? Я спробував пінг, але нічого, рис тут . Ifconfig -app праворуч і емулятор терміналу ліворуч, намагаючись пінгувати dev-машину. Не бачите нічого в localhost, будь-яких простих тестів?
hhh

@hhh Ви можете спробувати JuiceSSH: play.google.com/store/apps/details?id=com.sonelli.juicessh Ви можете зв’язати свого хоста із зазначеного або реального IP хосту. Обидва варіанти працюють у мене.
Мухамед Гусейбашич

Я вважаю, що трафік з емулятора спочатку перенаправляється через "віртуальний" маршрутизатор (з IP-адресою 10.0.2.1, а не безпосередньо. Отже, між цим маршрутизатором 10.0.2.1і машиною хоста / розробника має бути одне додаткове з'єднання 127.0.0.1/10.0.2.2. Що я насправді зазвичай змінюю номер порту, до якого я хочу підключитися.
stdout

36

Якщо ви дійсно хочете, щоб ваш емулятор був присвоєний IP:

adb shell
ifconfig eth0

Що дасть вам щось на зразок:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]

Луїза сказала: Я спробувала метод Дерека. він може пінгувати в оболонці adb .
Тобі Нарі,

6
Я отримую цю помилку після adb shell: ifconfig: eth0: No such deviceбудь-які ідеї чому?
awavi

3
@awavi це може бути під іншим інтерфейсом, наприкладwlan0
Вільям Рід

26

Подобається це:

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()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

Перегляньте документи для отримання додаткової інформації: NetworkInterface .


5
І не забудьте дозвіл `` android.permission.INTERNET ''
Стефан

2
Це дає адресу IP6, як отримати IP4?
Akash Kava

19

За допомогою цього методу ви отримаєте 100% правильну ip-адресу для вашого емулятора Android

Щоб отримати ip-адресу вашого емулятора

Перейдіть до оболонки adb і введіть цю команду

adb shell
ifconfig eth0

введіть тут опис зображення

Після запуску цієї команди я отримую

ІР: 10.0.2.15

Маска: 255.255.255.0

Що працює для мене. Я також працюю над мережевим додатком.


10

Якщо вам потрібно звернутися до локального хосту вашого хост-комп'ютера, наприклад, коли ви хочете, щоб клієнт емулятора зв’язався із сервером, що працює на тому самому хості, використовуйте псевдонім 10.0.2.2 для посилання на інтерфейс зворотного зв'язку хост-комп'ютера. З точки зору емулятора, localhost (127.0.0.1) посилається на власний інтерфейс зворотного зв'язку. Докладніше: http://developer.android.com/guide/faq/commontasks.html#localhostalias


3
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()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

0

У коді мого додатка я можу отримати IP-адресу запущеного пристрою та натиснути легко, як beolow:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.