Я хотел бы программно найти IP-адреса компьютеров, подключенных через Wi-Fi к Android-устройству или эмулятору. Как мне это сделать?
получить IP-адрес компьютеров в сети WIFI на эмуляторе Android
Ответы (3)
Можете ли вы поделиться logcat, я подозреваю, что может быть какая-то другая проблема. Попробуйте этот код (как есть) в образце приложения, чтобы проверить, только работает ли IP-адрес Wi-Fi.
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = null;
ip = String.format("%d.%d.%d.%d",
(ipAddress & 0xff),
(ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff))
Как сказано в другой теме, эмулятор андроида работает в виртуальной частной сети.
Что означает, что эмулятор находится НЕ в той же сети, что и ваш компьютер, а в виртуальной. Ни один эмулятор не может видеть другие устройства, ни другие эмуляторы, ни другие устройства не могут видеть эмуляторы.
Кроме этого у меня есть вопрос:
Как я могу получить IP-адрес имени хоста с помощью WifiManager?
Например, мой компьютер находится в той же локальной сети, что и мой телефон Android (не в эмуляторе), и у него есть имя хоста, например User-PC. Когда я пытаюсь получить IP-адрес с помощью InetAddress.getByName("User-PC"); в java-приложении я получаю IP-адрес локальной сети, например 192.168.1.100, но когда я пробую его на телефоне, он не работает. Странно то, что я могу устанавливать соединения, если я знаю IP, но не могу разрешить его из имя хоста.
Любые идеи?
Если вы хотите определить IP-адрес «Эмулятора» или устройства Android, подключенного к любой сети, используйте этот код в своей программе. это даст вам точный IP-адрес, который сеть назначила вашему устройству.
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().toString();
//Now use this Ip Address...
}
}
}
}
catch (SocketException obj)
{
Log.e("Error occurred during IP fetching: ", obj.toString());
}