网上的一个wifi管理类
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import java.util.List; import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; /** * WIFI管理类 * @author * */ public class WifiAdmin { private static WifiAdmin wifiAdmin = null; private List<WifiConfiguration> mWifiConfiguration; //无线网络配置信息类集合(网络连接列表) private List<ScanResult> mWifiList; //检测到接入点信息类 集合 //描述任何Wifi连接状态 private WifiInfo mWifiInfo; WifiManager.WifiLock mWifilock; //能够阻止wifi进入睡眠状态,使wifi一直处于活跃状态 public WifiManager mWifiManager; /** * 获取该类的实例(懒汉) * @param context * @return */ public static WifiAdmin getInstance(Context context) { if(wifiAdmin == null) { wifiAdmin = new WifiAdmin(context); return wifiAdmin; } return null; } private WifiAdmin(Context context) { //获取系统Wifi服务 WIFI_SERVICE this.mWifiManager = (WifiManager) context.getSystemService("wifi"); //获取连接信息 this.mWifiInfo = this.mWifiManager.getConnectionInfo(); } /** * 是否存在网络信息 * @param str 热点名称 * @return */ private WifiConfiguration isExsits(String str) { Iterator localIterator = this.mWifiManager.getConfiguredNetworks().iterator(); WifiConfiguration localWifiConfiguration; do { if(!localIterator.hasNext()) return null; localWifiConfiguration = (WifiConfiguration) localIterator.next(); }while(!localWifiConfiguration.SSID.equals(""" + str + """)); return localWifiConfiguration; } /**锁定WifiLock,当下载大文件时需要锁定 **/ public void AcquireWifiLock() { this.mWifilock.acquire(); } /**创建一个WifiLock**/ public void CreateWifiLock() { this.mWifilock = this.mWifiManager.createWifiLock("Test"); } /**解锁WifiLock**/ public void ReleaseWifilock() { if(mWifilock.isHeld()) { //判断时候锁定 mWifilock.acquire(); } } /**打开Wifi**/ public void OpenWifi() { if(!this.mWifiManager.isWifiEnabled()){ //当前wifi不可用 this.mWifiManager.setWifiEnabled(true); } } /**关闭Wifi**/ public void closeWifi() { if(mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } /**端口指定id的wifi**/ public void disconnectWifi(int paramInt) { this.mWifiManager.disableNetwork(paramInt); } /**添加指定网络**/ public void addNetwork(WifiConfiguration paramWifiConfiguration) { int i = mWifiManager.addNetwork(paramWifiConfiguration); //System.out.println("***********i**"+i+"************"); mWifiManager.enableNetwork(i, true); } /** * 连接指定配置好的网络 * @param index 配置好网络的ID */ public void connectConfiguration(int index) { // 索引大于配置好的网络索引返回 if (index > mWifiConfiguration.size()) { return; } //连接配置好的指定ID的网络 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true); } /** * 根据wifi信息创建或关闭一个热点 * @param paramWifiConfiguration * @param paramBoolean 关闭标志 */ public void createWifiAP(WifiConfiguration paramWifiConfiguration,boolean paramBoolean) { 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 localWifiManager = this.mWifiManager; Object[] arrayOfObject = new Object[2]; arrayOfObject[0] = paramWifiConfiguration; arrayOfObject[1] = Boolean.valueOf(paramBoolean); localMethod.invoke(localWifiManager, arrayOfObject); return; } catch (Exception e) { e.printStackTrace(); } } /** * 创建一个wifi信息 * @param ssid 名称 * @param passawrd 密码 * @param paramInt 有3个参数,1是无密码,2是简单密码,3是wap加密 * @param type 是"ap"还是"wifi" * @return */ public WifiConfiguration createWifiInfo(String ssid, String passawrd,int paramInt, String type) { //配置网络信息类 WifiConfiguration localWifiConfiguration1 = new WifiConfiguration(); //设置配置网络属性 localWifiConfiguration1.allowedAuthAlgorithms.clear(); localWifiConfiguration1.allowedGroupCiphers.clear(); localWifiConfiguration1.allowedKeyManagement.clear(); localWifiConfiguration1.allowedPairwiseCiphers.clear(); localWifiConfiguration1.allowedProtocols.clear(); if(type.equals("wt")) { //wifi连接 localWifiConfiguration1.SSID = (""" + ssid + """); WifiConfiguration localWifiConfiguration2 = isExsits(ssid); if(localWifiConfiguration2 != null) { mWifiManager.removeNetwork(localWifiConfiguration2.networkId); //从列表中删除指定的网络配置网络 } if(paramInt == 1) { //没有密码 localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if(paramInt == 2) { //简单密码 localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.wepKeys[0] = (""" + passawrd + """); } else { //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); } }else {//"ap" wifi热点 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; if (paramInt == 1) { //没有密码 localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if (paramInt == 2) { //简单密码 localWifiConfiguration1.hiddenSSID = true;//网络上不广播ssid localWifiConfiguration1.wepKeys[0] = passawrd; } else if (paramInt == 3) {//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); } } return localWifiConfiguration1; } /**获取热点名**/ 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; } /**获取wifi名**/ public String getBSSID() { if (this.mWifiInfo == null) return "NULL"; return this.mWifiInfo.getBSSID(); } /**得到配置好的网络 **/ public List<WifiConfiguration> getConfiguration() { return this.mWifiConfiguration; } /**获取ip地址**/ public int getIPAddress() { return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress(); } /**获取物理地址(Mac)**/ public String getMacAddress() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress(); } /**获取网络id**/ public int getNetworkId() { return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId(); } /**获取热点创建状态**/ 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网卡状态 } /**获取wifi连接信息**/ public WifiInfo getWifiInfo() { return this.mWifiManager.getConnectionInfo(); } /** 得到网络列表**/ public List<ScanResult> getWifiList() { return this.mWifiList; } /**查看扫描结果**/ public StringBuilder lookUpScan() { StringBuilder localStringBuilder = new StringBuilder(); for (int i = 0; i < mWifiList.size(); i++) { localStringBuilder.append("Index_"+new Integer(i + 1).toString() + ":"); //将ScanResult信息转换成一个字符串包 //其中把包括:BSSID、SSID、capabilities、frequency、level localStringBuilder.append((mWifiList.get(i)).toString()); localStringBuilder.append("n"); } return localStringBuilder; } /** 设置wifi搜索结果 **/ public void setWifiList() { this.mWifiList = this.mWifiManager.getScanResults(); } /**开始搜索wifi**/ public void startScan() { this.mWifiManager.startScan(); } /**得到接入点的BSSID**/ public String GetBSSID() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); } }
简单封装,实现程序控制wifi的启动与关闭
import java.util.Timer; import java.util.TimerTask; import com.example.demo.wifi.WifiAdmin; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.net.wifi.WifiConfiguration; import android.view.View; public class WifiUtils { private static WifiAdmin m_wiFiAdmin; public interface OnWifiEvent{ public void onWifiStartOpen(); public void onWifiOpenSuccess(); public void onWifiOpenFailed(); } public static void openWifi(Context ctx){ if(m_wiFiAdmin == null){ m_wiFiAdmin = WifiAdmin.getInstance(ctx); } m_wiFiAdmin.OpenWifi(); } public static void closeWifi(Context ctx){ if(m_wiFiAdmin == null){ m_wiFiAdmin = WifiAdmin.getInstance(ctx); } m_wiFiAdmin.closeWifi(); } /** * 连接指定用户名和密码的wifi * @param wifissid * @param wifipwd */ public static void connectToCentainWifi(Context ctx,String wifissid, String wifipwd){ if(m_wiFiAdmin == null){ m_wiFiAdmin = WifiAdmin.getInstance(ctx); } //openWifi(ctx); WifiConfiguration wificonfiguration = m_wiFiAdmin.createWifiInfo(wifissid, wifipwd, 3, "wt"); m_wiFiAdmin.addNetwork(wificonfiguration); } /** * 判断wifi连接状态 * * @param ctx * @return */ public static boolean isWifiAvailable(Context ctx) { ConnectivityManager conMan = (ConnectivityManager) ctx .getSystemService(Context.CONNECTIVITY_SERVICE); State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); if (State.CONNECTED == wifi) { return true; } else { return false; } } /** * 对指定wifi进行连接 * @param ctx * @param wifissid * @param wifipwd * @param wifiEvent */ public static void connectToWifi(final Context ctx, final String wifissid, final String wifipwd, final OnWifiEvent wifiEvent){ if(m_wiFiAdmin == null){ m_wiFiAdmin = WifiAdmin.getInstance(ctx); } //开启wifi WifiUtils.openWifi(ctx); wifiEvent.onWifiStartOpen(); final Timer timer = new Timer(); timer.schedule(new TimerTask(){ int i = 0; @Override public void run() { //当wifi开启成功的时候 if(WifiUtils.isWifiAvailable(ctx)){ //连接指定的wifi热点 WifiUtils.connectToCentainWifi(ctx, wifissid, wifipwd); wifiEvent.onWifiOpenSuccess(); timer.cancel(); } //System.out.println("************run**"+i+"***************"); i++; if(i == 10){ //如果10秒内wifi没有开启成功,则重新开启wifi 测试一般4s左右可以打开wifi timer.cancel(); wifiEvent.onWifiOpenFailed(); } } }, 1000, 1000); } }