Определить IP-адрес Wi-Fi на Android?

#android #networking #wifi

#Android #сеть #wifi

Вопрос:

Мне нужно определить, подключено ли Android-устройство к Wi-Fi, и если да, то получить его IP-адрес Wi-Fi.

Я знаю, как использовать ConnectivityManager, чтобы определить, является ли активная сеть сетью Wi-Fi, и я знаю, как использовать java.net.NetworkInterface для перебора доступных сетевых интерфейсов и получения их IP-адресов.

Что я не знаю, как сделать, так это определить, какой IP-адрес принадлежит сети Wi-Fi, если найдено более одного адреса. Любой совет?

Спасибо.

Ответ №1:

 public String getIpAddr() {
   WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
   WifiInfo wifiInfo = wifiManager.getConnectionInfo();
   int ip = wifiInfo.getIpAddress();

   String ipString = String.format(
   "%d.%d.%d.%d",
   (ip amp; 0xff),
   (ip >> 8 amp; 0xff),
   (ip >> 16 amp; 0xff),
   (ip >> 24 amp; 0xff));

   return ipString;
}
 

Пожалуйста, обратите внимание: вам нужно добавить android.permission.INTERNET и android.permission.ACCESS_WIFI_STATE в свой AndroidManifest.xml as <user-permission/> , чтобы получить доступ к коду.

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

Комментарии:

1. разрешение на доступ в ИНТЕРНЕТ не требуется; просто ACCESS_WIFI_STATE (по крайней мере, на 4.1.1)

2. Потрясающе!!! Это был единственный код, который работал для получения локального IP-адреса Wi-Fi-СЕТИ моего смартфона. Я действительно искал часы.

3. Вы можете использовать Formatter.formatIpAddress вместо форматирования вручную.

4. Есть ли способ получить IPv6-адрес Wifi?

Ответ №2:

Пожалуйста, попробуйте этот код.

 ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

//To fetch the state of the Wi-Fi network in the device
Boolean isWifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 

WifiManager wifiMgr = (WifiManager) getBaseContext().getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); 

//To fetch the name of the Wi-Fi network to which the device is connected
String wifiName = wifiInfo.getSSID(); 
 

Комментарии:

1. Это полезно тем, что дает мне имя сети Wi-Fi, но это не совсем то, что я искал. Когда я перечисляю сетевые интерфейсы, у них есть такие имена, как «tiwlan0». Мне нужно связать это имя с активной сетью.

Ответ №3:

 static final int IP_ADDRESS_LENGTH = 32;

  public static Integer getSystemWifiIpAddress(Context context)
  {
    WifiManager wManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wInfo = wManager.getConnectionInfo();

    int ipAddress = wInfo.getIpAddress();
    if (ipAddress == 0)
      return null;
    return ipAddress;
  }
 

Комментарии:

1. Как IP-адрес может быть int?