Как получить IP-адрес сотовой сети, когда устройство подключено к Wi-Fi в Android
Есть ли способ, по которому я могу одновременно получать IP-адрес как WiFi, так и сотовой сети в Android. Я попытался использовать множество примеров, но смог получить адрес только сети 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) {
}
Можно ли получить IP-адрес сотовой сети, когда устройство подключено к WiFi. Если да, то как это возможно.
Ответы
Ответ 1
Всякий раз, когда вы включаете WiFi на своем устройстве и имеете активное подключение к сети WiFi, ваши мобильные данные временно отключены, независимо от того, включена ли она вручную или нет. Параметр "Включение/выключение мобильных данных" учитывается только в том случае, если у вас нет активного соединения WiFi.
Некоторые пользовательские ПЗУ имеют возможность сохранить мобильное соединение живым при подключении к WiFi (поэтому, если вы потеряете соединение WiFi, он быстрее переключится на мобильный), но все же используется соединение WiFi.
Вывод: Вы не можете получить оба IP-адреса, так как у вас не может быть WiFi и мобильной сети (и если вы можете, вы активно используете WiFi)
Ответ 2
попробуйте, это может быть полезно...
Для мобильного 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 "";
}
Для IP-адреса Wifi....
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();
вы получаете Output вроде этого......
![o]()
По возможности дубликат Как получить IP-адрес устройства
Ответ 3
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
Ответ 4
В вашем 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" />
Источник: Получите мой IP-адрес WiFi для Android
Надеюсь, это поможет! Удачи!
Ответ 5
Вы не получите IP для сотового соединения, когда ваш Wi-Fi включен и подключен. Это потому, что система не использует сотовую передачу данных для экономии заряда батареи. Хотя вы можете одновременно включить оба из них, система будет использовать только по одному. Это похоже: оба разрешены, но используется только один.
Есть только один пример, о котором я могу думать: когда вы подключаетесь через Wi-Fi к сети без доступа в Интернет, ваш телефон также будет подключаться через сотовую связь.