android 得到连接热点的ip的方法

Posted 大伟机器人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 得到连接热点的ip的方法相关的知识,希望对你有一定的参考价值。

WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
System.out.println("=================");
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String IPAddress = intToIp(wifiInfo.getIpAddress());
System.out.println("IPAddress-->>" + IPAddress);

DhcpInfo dhcpinfo = wifiManager.getDhcpInfo();
String serverAddress = intToIp(dhcpinfo.serverAddress);
System.out.println("serverAddress-->>" + serverAddress);
其中IPAddress 是本机的IP地址,serverAddress 是你所连接的wifi热点对应的IP地址
 
 

当在android设备终端上使用Wifi热点的时候,需要获知Wifi热点的运行状态,热点是否打开,连接到该WIFI热点的设备数量,以及连接设备的具体IP和MAC地址。

使用re文件管理器去"/proc/net/arp",打开,发现连接上热点的设备信息都在这里了,包括mac ip等。

鉴于此,我们可以在代码中打开该文件,并获取WIFI热点的信息。

 

获取WIFI热点状态的方法getWifiApState()和判断热点是否可用的方法isApEnabled(),在Android源码WifiManager.Java中已经实现,但是它们是Hide方法,在SDK层面是不能访问的,如要访问需要用到java反射的机制。具体代码实现如下:

 

其中定义WIFI AP的几个状态

 

[java] view plain copy
 
 技术分享技术分享
  1. public static final int WIFI_AP_STATE_DISABLING = 10;    
  2. public static final int WIFI_AP_STATE_DISABLED = 11;    
  3. public static final int WIFI_AP_STATE_ENABLING = 12;    
  4. public static final int WIFI_AP_STATE_ENABLED = 13;    
  5. public static final int WIFI_AP_STATE_FAILED = 14;   

对应于WifiMangaer.java中对这几个状态的定义。

 

 

获取WIFI热点的状态:

 

[java] view plain copy
 
 技术分享技术分享
  1. public int getWifiApState(Context mContext) {    
  2.     WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);   
  3.        try {    
  4.            Method method = wifiManager.getClass().getMethod("getWifiApState");    
  5.            int i = (Integer) method.invoke(wifiManager);    
  6.            Log.i(TAG,"wifi state:  " + i);    
  7.            return i;    
  8.        } catch (Exception e) {    
  9.            Log.e(TAG,"Cannot get WiFi AP state" + e);    
  10.            return WIFI_AP_STATE_FAILED;    
  11.        }    
  12.    }    

判断Wifi热点是否可用:

 

 

[java] view plain copy
 
 技术分享技术分享
  1. public boolean isApEnabled(Context mContext) {    
  2.        int state = getWifiApState(mContext);    
  3.        return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;    
  4.    }   


 

获取链接到当前热点的设备IP:

[java] view plain copy
 
 技术分享技术分享
  1. private ArrayList<String> getConnectedHotIP() {  
  2.     ArrayList<String> connectedIP = new ArrayList<String>();  
  3.     try {  
  4.         BufferedReader br = new BufferedReader(new FileReader(  
  5.                 "/proc/net/arp"));  
  6.         String line;  
  7.         while ((line = br.readLine()) != null) {  
  8.             String[] splitted = line.split(" +");  
  9.             if (splitted != null && splitted.length >= 4) {  
  10.                 String ip = splitted[0];  
  11.                 connectedIP.add(ip);  
  12.             }  
  13.         }  
  14.     } catch (Exception e) {  
  15.         e.printStackTrace();  
  16.     }  
  17.     return connectedIP;  
  18. }  
[java] view plain copy
 
 技术分享技术分享
  1. //输出链接到当前设备的IP地址  
  2. public void printHotIp() {  
  3.   
  4.     ArrayList<String> connectedIP = getConnectedHotIP();  
  5.     StringBuilder resultList = new StringBuilder();  
  6.     for (String ip : connectedIP) {  
  7.         resultList.append(ip);  
  8.         resultList.append("\n");  
  9.     }  
  10.     System.out.print(resultList);  
  11.     Log.d(TAG,"---->>heww resultList="+resultList);  
  12. }  

 

当然在应用中要添加访问WIFI设备的权限:

 

[html] view plain copy
 
 技术分享技术分享
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

否则将会提示如下错误:

 

Cannot get WiFi AP state

 

 

 


















以上是关于android 得到连接热点的ip的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android11 设置默认热点名称和热点密码密码长度

电脑怎么连接不到ip####06热点?

使用电脑热点对Android app进行抓包

如何用android手机当wifi热点

电脑连接WIFI热点为啥一直显示正在获取IP地址?

电脑连接WIFI热点为啥一直显示正在获取IP地址