在Android上检测wifi IP地址?

Posted

技术标签:

【中文标题】在Android上检测wifi IP地址?【英文标题】:Detect wifi IP address on Android? 【发布时间】:2011-12-20 00:02:00 【问题描述】:

我需要确定android设备是否连接到Wifi,如果是,获取它的Wifi IP地址。

我知道如何使用 ConnectivityManager 来确定活动网络是否是 Wifi 网络,并且我知道如何使用 java.net.NetworkInterface 来遍历可用的网络接口并获取它们的 IP 地址。

如果找到多个地址,我不知道该怎么做是确定哪个 IP 地址属于 Wifi 网络。有什么建议吗?

谢谢。

【问题讨论】:

【参考方案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 & 0xff),
   (ip >> 8 & 0xff),
   (ip >> 16 & 0xff),
   (ip >> 24 & 0xff));

   return ipString;

请注意:您需要在AndroidManifest.xml 中添加android.permission.INTERNETandroid.permission.ACCESS_WIFI_STATE<user-permission/> 才能访问代码。

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

【讨论】:

不需要INTERNET权限;只是 ACCESS_WIFI_STATE(至少在 4.1.1 上) 太棒了!!!这是唯一可用于获取我的智能手机的本地 Wifi-LAN IP 的代码。我真的搜索了几个小时。 您可以使用 Formatter.formatIpAddress 而不是手动进行格式化。 有没有办法获取 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(); 

【讨论】:

这很有用,因为它为我提供了 Wifi 网络的名称,但这并不是我真正想要的。当我枚举网络接口时,它们具有诸如“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;
  

【讨论】:

IP怎么可能是int?

以上是关于在Android上检测wifi IP地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式通过 Wifi 获取连接在同一网络上的其他设备的 IP 地址?

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

android获取Mac地址和IP地址

设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址

如何以编程方式在android中获取连接的wifi路由器的IP地址?

ANDROID 获取网络上的所有 IP 地址