Android获取当前WIFI所有信息:
我在这里提供一个获取WIFI信息的工具类,里边包含的方法有:
1、Android创建一个创建一个WifiLock
2、Android打开WIIF,Andorid关闭WIFI
3、用路由器或者热点的WIFI名称和WIFI密码配置一个连接WIFI的Config
4、连接一个已经配置好的WIFI
5、断开指定的WIFI
6、Andorid创建WIFI热点
7、获取当前连接的路由器的IP地址
8、获取手机在当前路由器中的局域网IP地址
9、获取当前连接的WIFI的名称
10、获取本机当前Wlan Mac地址
11、扫描当前WIFI,获得手机WIFI列表
/** * @author YOLANDA * @Time 2015年3月2日 上午10:34:00 */ public class WifiUtil { private static WifiUtil _WifiUtil; /**WifiManager**/ public WifiManager mWifiManager; /**能够阻止wifi进入睡眠状态,使wifi一直处于活跃状态**/ private WifiManager.WifiLock mWifilock; /** * 初始化 * @author YOLANDA * @param context */ private WifiUtil(Context context) { this.mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); } /** * 实例 * @author YOLANDA * @param context * @return */ public static WifiUtil getInstance(Context context){ if(_WifiUtil == null){ _WifiUtil = new WifiUtil(context); } return _WifiUtil; } /*=======================Wifi Lock========================*/ /** * 创建一个WifiLock * @author YOLANDA */ public void createWifiLock() { this.mWifilock = this.mWifiManager.createWifiLock("WifiLock"); } /** * 锁定WifiLock,当下载大文件时需要锁定 * @author YOLANDA */ public void lockWifi() { this.mWifilock.acquire(); } /** * 解锁WifiLock * @author YOLANDA */ public void unlockWifi() { if(mWifilock.isHeld()) { //判断是否锁定 mWifilock.acquire(); } } /*=======================Wifi Info========================*/ /** * 打开Wifi * @author YOLANDA */ public void openWifi() { if(!this.mWifiManager.isWifiEnabled()){ //当前wifi不可用 this.mWifiManager.setWifiEnabled(true); } } /** * 关闭Wifi * @author YOLANDA */ public void closeWifi() { if(mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } /** * 配置一个wifi连接信息 * @author YOLANDA * @param ssid * @param passawrd * @param passType 密码类型 * @param configurationType 配置类型 * @return */ public WifiConfiguration createWifiInfo(String ssid, String passawrd, PassType passType, ConfigurationType configurationType) { //配置网络信息类 WifiConfiguration localWifiConfiguration1 = new WifiConfiguration(); //设置配置网络属性 localWifiConfiguration1.allowedAuthAlgorithms.clear(); localWifiConfiguration1.allowedGroupCiphers.clear(); localWifiConfiguration1.allowedKeyManagement.clear(); localWifiConfiguration1.allowedPairwiseCiphers.clear(); localWifiConfiguration1.allowedProtocols.clear(); switch (configurationType) { case Wifi://Wifi连接 localWifiConfiguration1.SSID = ("\"" + ssid + "\""); WifiConfiguration localWifiConfiguration2 = isExsits(ssid); if(localWifiConfiguration2 != null) { mWifiManager.removeNetwork(localWifiConfiguration2.networkId); //从列表中删除指定的网络配置网络 } switch (passType) { case SimplePass://简单密码 localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.wepKeys[0] = ("\"" + passawrd + "\""); break; case WapPass://wap密码 localWifiConfiguration1.preSharedKey = ("\"" + passawrd + "\""); localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.allowedAuthAlgorithms.set(0); localWifiConfiguration1.allowedGroupCiphers.set(2); localWifiConfiguration1.allowedKeyManagement.set(1); localWifiConfiguration1.allowedPairwiseCiphers.set(1); localWifiConfiguration1.allowedGroupCiphers.set(3); localWifiConfiguration1.allowedPairwiseCiphers.set(2); break; default://没有密码 localWifiConfiguration1.allowedKeyManagement.set(0); break; } break; default://AP热点 localWifiConfiguration1.SSID = ssid; localWifiConfiguration1.allowedAuthAlgorithms.set(1); localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; switch (passType) { case SimplePass://简单密码 localWifiConfiguration1.hiddenSSID = true;//网络上不广播ssid localWifiConfiguration1.wepKeys[0] = passawrd; break; case WapPass://wap密码 localWifiConfiguration1.preSharedKey = passawrd; localWifiConfiguration1.allowedAuthAlgorithms.set(0); localWifiConfiguration1.allowedProtocols.set(1); localWifiConfiguration1.allowedProtocols.set(0); localWifiConfiguration1.allowedKeyManagement.set(1); localWifiConfiguration1.allowedPairwiseCiphers.set(2); localWifiConfiguration1.allowedPairwiseCiphers.set(1); break; default://没有密码 localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; break; } break; } return localWifiConfiguration1; } /** * 密码类型 * @Project SmartControl * @Class WifiUtil.java * @author YOLANDA * @Time 2015年3月2日 上午10:34:55 */ public enum PassType{ /**无密码**/ NullPass, /**简单密码,Net上不广播SSID**/ SimplePass, /**wap密码**/ WapPass; } /** * Wifi配置类型 * @Project SmartControl * @Class WifiUtil.java * @author YOLANDA * @Time 2015年3月2日 上午10:35:01 */ public enum ConfigurationType{ /**Wifi类型**/ Wifi, /**AP类型**/ AP; } /** * 添加一个网络,用返回的ID call {@link #enableNetwork(int)} * @see #addNetworkConnect(WifiConfiguration) * @author YOLANDA * @param wifiConfiguration * @return the ID of the newly created network description. This is used in * other operations to specified the network to be acted upon. * Returns {@code -1} on failure. */ public int addNetwork(WifiConfiguration wifiConfiguration) { return mWifiManager.addNetwork(wifiConfiguration); } /** * 连接指定添加的网络 * 用 {@link #addNetwork(WifiConfiguration)} 返回的ID * @author YOLANDA * @param networkId */ public boolean enableNetwork(int networkId, boolean disableOthers) { return mWifiManager.enableNetwork(networkId, disableOthers); } /** * 添加指定网络并连接 * @see #addNetwork(WifiConfiguration) * @see #enableNetwork(int) * @author YOLANDA * @param wifiConfiguration * @return */ public boolean addNetworkConnect(WifiConfiguration wifiConfiguration, boolean disableOthers) { int i = mWifiManager.addNetwork(wifiConfiguration); return enableNetwork(i, disableOthers); } /** * 断开指定id的wifi * @author YOLANDA * @param paramInt WifiConfiguration.networkId */ public void disconnectWifi(WifiConfiguration wifiConfiguration) { if(wifiConfiguration != null) disconnectWifi(wifiConfiguration.networkId); } /** * 断开指定id的wifi * @author YOLANDA * @param paramInt WifiConfiguration.networkId */ public void disconnectWifi(int paramInt) { this.mWifiManager.disableNetwork(paramInt); } /** * 是否存在某个网络信息 * @param str Wifi名称:WifiConfiguration.SSID 去掉两边的"\" * @return */ private WifiConfiguration isExsits(String str) { Iterator<WifiConfiguration> localIterator = this.mWifiManager.getConfiguredNetworks().iterator(); WifiConfiguration wifiConfiguration; do { if(!localIterator.hasNext()) { return null; } wifiConfiguration = localIterator.next(); }while(!wifiConfiguration.SSID.equals("\"" + str + "\"")); return wifiConfiguration; } /*=======================Wifi 热点========================*/ /** * 根据wifi信息创建或关闭一个热点 * @author YOLANDA * @param paramWifiConfiguration * @param paramBoolean */ public void operationWifiAP(WifiConfiguration wifiConfiguration, Boolean isCreateOrClose) { try { Class<?> localClass = this.mWifiManager.getClass(); Class<?>[] arrayOfClass = new Class[2]; arrayOfClass[0] = WifiConfiguration.class; arrayOfClass[1] = Boolean.TYPE; Method localMethod = localClass.getMethod("setWifiApEnabled", arrayOfClass); WifiManager wifiManager = this.mWifiManager; Object[] arrayOfObject = new Object[2]; arrayOfObject[0] = wifiConfiguration; arrayOfObject[1] = isCreateOrClose; localMethod.invoke(wifiManager, arrayOfObject); return; } catch (Exception e) { e.printStackTrace(); } } /** * 获取热点名 * @author YOLANDA * @return */ public String getApSSID() { try { Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]); if (localMethod == null) return null; Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]); if (localObject1 == null) return null; WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1; if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID; Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile"); if (localField1 == null) return null; localField1.setAccessible(true); Object localObject2 = localField1.get(localWifiConfiguration); localField1.setAccessible(false); if (localObject2 == null) return null; Field localField2 = localObject2.getClass().getDeclaredField("SSID"); localField2.setAccessible(true); Object localObject3 = localField2.get(localObject2); if (localObject3 == null) return null; localField2.setAccessible(false); String str = (String) localObject3; return str; } catch (Exception localException) { } return null; } /** * 获取热点创建状态 * @author YOLANDA * @return */ public int getWifiApState() { try { int i = ((Integer) this.mWifiManager.getClass() .getMethod("getWifiApState", new Class[0]) .invoke(this.mWifiManager, new Object[0])).intValue(); return i; } catch (Exception localException) { } return 4;// 未知wifi网卡状态 } /*=======================Current Wifi Info========================*/ /** * 获取当前已经连接wifi信息 * @author YOLANDA * @return */ public WifiInfo getCurrentWifiInfo() { return this.mWifiManager.getConnectionInfo(); } /** * 获取当前已经连接wifi MAC 地址 * @author YOLANDA * @return */ public String getCurrentBSSID() { WifiInfo info = getCurrentWifiInfo(); if(info != null){ return info.getBSSID(); } return null; } /** * 获取当前已经连接Wifi名称 * @author YOLANDA * @return */ public String getCurrentWifiName() { WifiInfo info = getCurrentWifiInfo(); if(info != null){ String s = info.getSSID(); //去掉开头和结尾的",留下中间的 if (!TextUtils.isEmpty(s) && (s.length() > 2) && (s.charAt(0) == '"') && (s.charAt(s.length() - 1) == '"')) { return s.substring(1, s.length() - 1); } } return null; } /** * 获取当前已经连接网络在本机的id * @author YOLANDA * @return 没有则返回0 */ public int getCurrentNetworkId() { WifiInfo info = getCurrentWifiInfo(); if(info != null){ return info.getNetworkId(); } return 0; } /** * 本机物理(Mac)地址 * @author YOLANDA * @return */ public String getMyMacAddress() { WifiInfo info = getCurrentWifiInfo(); if(info != null){ return info.getMacAddress(); } return null; } /** * 转化为真正的IP * @author YOLANDA * @param ipAddress * @return */ private String intToIp(int ipAddress) { return ((ipAddress & 0xff) + "." + (ipAddress>>8 & 0xff) + "." +(ipAddress>>16 & 0xff) + "." + (ipAddress>>24 & 0xff)); } /** * 获取当前本机ip地址 * @author YOLANDA * @return */ public String getMyIPAddress() { WifiInfo info = getCurrentWifiInfo(); if(info != null){ return intToIp(info.getIpAddress()); } return null; } /*=======================Outer Wifi Info List========================*/ /** * 开始搜索wifi * @author YOLANDA */ public void startScan() { this.mWifiManager.startScan(); } /** * 得到扫描到的网络列表 * @author YOLANDA * @return */ public List<ScanResult> getWifiList() { List<ScanResult> scanResults = this.mWifiManager.getScanResults(); return scanResults; } /** * 查看扫描结果 * @author YOLANDA * @return */ public StringBuilder lookUpScan(List<ScanResult> scanResults) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < scanResults.size(); i++){ stringBuilder.append("Index_" + Integer.valueOf(i + 1).toString() + ":"); //将ScanResult信息转换成一个字符串包 //其中把包括:BSSID、SSID、capabilities、frequency、level stringBuilder.append((scanResults.get(i)).toString()); stringBuilder.append("\n"); } return stringBuilder; } /** * 拿到最后一次连接成功的路由器的地址 * @author YOLANDA * @return */ public String getLastSucceedAddress() { DhcpInfo myDhcpInfo = mWifiManager.getDhcpInfo(); if (myDhcpInfo == null) { return "255.255.255.255"; } int broadcast = myDhcpInfo.ipAddress & myDhcpInfo.netmask | myDhcpInfo.netmask ^ 0xFFFFFFFF; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) { quads[k] = ((byte) (broadcast >> k * 8 & 0xFF)); } try { return InetAddress.getByAddress(quads).getHostAddress(); } catch (Exception e) { return "255.255.255.255"; } } }