在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.INTERNET
和android.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中连接到WiFi时如何获取蜂窝网络的IP地址