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的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!