Android 得到连接热点的ip的方法
下面给大家介绍Android得到连接热点的ip的方法,具体代码如下所示:
WifiManagerwifiManager=(WifiManager)this.getSystemService(Context.WIFI_SERVICE); if(!wifiManager.isWifiEnabled()){ System.out.println("================="); wifiManager.setWifiEnabled(true); } WifiInfowifiInfo=wifiManager.getConnectionInfo(); StringIPAddress=intToIp(wifiInfo.getIpAddress()); System.out.println("IPAddress-->>"+IPAddress); DhcpInfodhcpinfo=wifiManager.getDhcpInfo(); StringserverAddress=intToIp(dhcpinfo.serverAddress); System.out.println("serverAddress-->>"+serverAddress);
其中IPAddress是本机的IP地址,serverAddress是你所连接的wifi热点对应的IP地址
privateStringintToIp(intparamInt) { return(paramInt&0xFF)+"."+(0xFF¶mInt>>8)+"."+(0xFF¶mInt>>16)+"." +(0xFF¶mInt>>24); }
当在Android设备终端上使用Wifi热点的时候,需要获知Wifi热点的运行状态,热点是否打开,连接到该WIFI热点的设备数量,以及连接设备的具体IP和MAC地址。
使用re文件管理器去"/proc/net/arp",打开,发现连接上热点的设备信息都在这里了,包括macip等。
鉴于此,我们可以在代码中打开该文件,并获取WIFI热点的信息。
获取WIFI热点状态的方法getWifiApState()和判断热点是否可用的方法isApEnabled(),在Android源码WifiManager.Java中已经实现,但是它们是Hide方法,在SDK层面是不能访问的,如要访问需要用到java反射的机制。具体代码实现如下:
其中定义WIFIAP的几个状态
publicstaticfinalintWIFI_AP_STATE_DISABLING=10; publicstaticfinalintWIFI_AP_STATE_DISABLED=11; publicstaticfinalintWIFI_AP_STATE_ENABLING=12; publicstaticfinalintWIFI_AP_STATE_ENABLED=13; publicstaticfinalintWIFI_AP_STATE_FAILED=14;
对应于WifiMangaer.java中对这几个状态的定义。
获取WIFI热点的状态:
publicintgetWifiApState(ContextmContext){ WifiManagerwifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE); try{ Methodmethod=wifiManager.getClass().getMethod("getWifiApState"); inti=(Integer)method.invoke(wifiManager); Log.i(TAG,"wifistate:"+i); returni; }catch(Exceptione){ Log.e(TAG,"CannotgetWiFiAPstate"+e); returnWIFI_AP_STATE_FAILED; } }
判断Wifi热点是否可用:
publicbooleanisApEnabled(ContextmContext){ intstate=getWifiApState(mContext); returnWIFI_AP_STATE_ENABLING==state||WIFI_AP_STATE_ENABLED==state; }
获取链接到当前热点的设备IP:
privateArrayListgetConnectedHotIP(){ ArrayList connectedIP=newArrayList (); try{ BufferedReaderbr=newBufferedReader(newFileReader( "/proc/net/arp")); Stringline; while((line=br.readLine())!=null){ String[]splitted=line.split("+"); if(splitted!=null&&splitted.length>=4){ Stringip=splitted[0]; connectedIP.add(ip); } } }catch(Exceptione){ e.printStackTrace(); } returnconnectedIP; } //输出链接到当前设备的IP地址 publicvoidprintHotIp(){ ArrayList connectedIP=getConnectedHotIP(); StringBuilderresultList=newStringBuilder(); for(Stringip:connectedIP){ resultList.append(ip); resultList.append("\n"); } System.out.print(resultList); Log.d(TAG,"---->>hewwresultList="+resultList); }
当然在应用中要添加访问WIFI设备的权限:
否则将会提示如下错误:
CannotgetWiFiAPstate
总结
以上所述是小编给大家介绍的Android得到连接热点的ip的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!