wifi 工具代码
来源:互联网 发布:唐诗宋词朗诵软件 编辑:程序博客网 时间:2024/06/08 02:48
功能实现:控制wifi开关,连上某个特定的wifi。
首先先上个wifi工具类,此类转载网上一人,出处不明了。
package rodar.rgs.conference.utils;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.net.InetAddress;import java.util.ArrayList;import java.util.List;import android.net.wifi.ScanResult;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiManager;public class WifiConnect { WifiManager wifiManager; //定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况 public enum WifiCipherType { WIFICIPHER_WEP,WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID } //构造函数 public WifiConnect(WifiManager wifiManager) { this.wifiManager = wifiManager; } //打开wifi功能 private boolean OpenWifi() { boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); } return bRet; } //提供一个外部接口,传入要连接的无线网 public boolean Connect(String SSID, String Password, WifiCipherType Type) { if(!this.OpenWifi()) { return false; } System.out.println(">>>wifiCon="); //开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi //状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句 while(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING ) { try{ //为了避免程序一直while循环,让它睡个100毫秒在检测…… Thread.currentThread(); Thread.sleep(100); } catch(InterruptedException ie){ } } WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type); // if(wifiConfig == null) { return false; } WifiConfiguration tempConfig = this.IsExsits(SSID); if(tempConfig != null) { wifiManager.removeNetwork(tempConfig.networkId); }// try {// //高级选项// String ip ="192.168.1.201";// int networkPrefixLength =24;// InetAddress intetAddress = InetAddress.getByName(ip);// int intIp = inetAddressToInt(intetAddress); // String dns = (intIp & 0xFF ) + "." + ((intIp >> 8 ) & 0xFF) + "." + ((intIp >> 16 ) & 0xFF) + ".1";// setIpAssignment("STATIC", wifiConfig); //"STATIC" or "DHCP" for dynamic setting// setIpAddress(intetAddress, networkPrefixLength, wifiConfig);// setGateway(InetAddress.getByName(dns), wifiConfig);// setDNS(InetAddress.getByName(dns), wifiConfig);// } catch (Exception e) {// // TODO: handle exception// e.printStackTrace();// } int netID = wifiManager.addNetwork(wifiConfig); boolean bRet = wifiManager.enableNetwork(netID, true); // wifiManager.updateNetwork(wifiConfig); return bRet; } //查看以前是否也配置过这个网络 private WifiConfiguration IsExsits(String SSID) { List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\""+SSID+"\"")) { return existingConfig; } } return null; } private WifiConfiguration CreateWifiInfo(String SSID, String Password, WifiCipherType Type) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; if(Type == WifiCipherType.WIFICIPHER_NOPASS) { config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if(Type == WifiCipherType.WIFICIPHER_WEP) { config.preSharedKey = "\""+Password+"\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if(Type == WifiCipherType.WIFICIPHER_WPA) { config.preSharedKey = "\""+Password+"\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } else { return null; } return config; } /*** * Convert a IPv4 address from an InetAddress to an integer * @param inetAddr is an InetAddress corresponding to the IPv4 address * @return the IP address as an integer in network byte order */ public static int inetAddressToInt(InetAddress inetAddr) throws IllegalArgumentException { byte [] addr = inetAddr.getAddress(); if (addr.length != 4) { throw new IllegalArgumentException("Not an IPv4 address"); } return ((addr[3] & 0xff) << 24) | ((addr[2] & 0xff) << 16) | ((addr[1] & 0xff) << 8) | (addr[0] & 0xff); } public static void setIpAssignment(String assign, WifiConfiguration wifiConf)throws SecurityException, IllegalArgumentException,NoSuchFieldException, IllegalAccessException { setEnumField(wifiConf, assign, "ipAssignment"); } public static void setEnumField(Object obj, String value, String name) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Field f = obj.getClass().getField(name); f.set(obj, Enum.valueOf((Class<Enum>) f.getType(), value)); } public static void setIpAddress(InetAddress addr, int prefixLength,WifiConfiguration wifiConf) throws SecurityException,IllegalArgumentException, NoSuchFieldException,IllegalAccessException, NoSuchMethodException,ClassNotFoundException, InstantiationException,InvocationTargetException { Object linkProperties = getField(wifiConf, "linkProperties"); if (linkProperties == null) return; Class laClass = Class.forName("android.net.LinkAddress"); Constructor laConstructor = laClass.getConstructor(new Class[] {InetAddress.class, int.class }); Object linkAddress = laConstructor.newInstance(addr, prefixLength); ArrayList mLinkAddresses = (ArrayList) getDeclaredField(linkProperties,"mLinkAddresses"); mLinkAddresses.clear(); mLinkAddresses.add(linkAddress); } public static void setGateway(InetAddress gateway,WifiConfiguration wifiConf) throws SecurityException,IllegalArgumentException, NoSuchFieldException,IllegalAccessException, ClassNotFoundException,NoSuchMethodException, InstantiationException,InvocationTargetException { Object linkProperties = getField(wifiConf, "linkProperties"); if (linkProperties == null) return; Class routeInfoClass = Class.forName("android.net.RouteInfo"); Constructor routeInfoConstructor = routeInfoClass.getConstructor(new Class[] { InetAddress.class }); Object routeInfo = routeInfoConstructor.newInstance(gateway); ArrayList mRoutes = (ArrayList) getDeclaredField(linkProperties,"mRoutes"); mRoutes.clear(); mRoutes.add(routeInfo); } public static void setDNS(InetAddress dns, WifiConfiguration wifiConf) throws SecurityException, IllegalArgumentException,NoSuchFieldException, IllegalAccessException { Object linkProperties = getField(wifiConf, "linkProperties"); if (linkProperties == null) return; ArrayList<InetAddress> mDnses = (ArrayList<InetAddress>) getDeclaredField(linkProperties, "mDnses"); mDnses.clear(); // or add a new dns address , here I just want to replace DNS1 mDnses.add(dns); } public static Object getField(Object obj, String name) throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException { Field f = obj.getClass().getField(name); Object out = f.get(obj); return out; } public static Object getDeclaredField(Object obj, String name) throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException { Field f = obj.getClass().getDeclaredField(name); f.setAccessible(true); Object out = f.get(obj); return out; }// public void editStaticWifiConfig(final ScanResult sr,String pwd, String ip, String gateway,int prefixLength,String dns) throws Exception{ // WifiConfiguration historyWifiConfig = getHistoryWifiConfig(sr.SSID);// // if(historyWifiConfig == null){// historyWifiConfig = createComWifiConfig(sr.SSID,pwd);// int netId = mWifiManager.addNetwork(historyWifiConfig);// mWifiManager.enableNetwork(netId, true);// }// // setIpAssignment("STATIC", historyWifiConfig); //"STATIC" or "DHCP" for dynamic setting// setIpAddress(InetAddress.getByName(ip), prefixLength, historyWifiConfig);// setGateway(InetAddress.getByName(gateway), historyWifiConfig);// setDNS(InetAddress.getByName(dns), historyWifiConfig);// // mWifiManager.updateNetwork(historyWifiConfig); //apply the setting// }// // public void editDhcpWifiConfig(final ScanResult sr,String pwd) throws Exception{ // WifiConfiguration historyWifiConfig = getHistoryWifiConfig(sr.SSID);// // if(historyWifiConfig == null){// historyWifiConfig = createComWifiConfig(sr.SSID,pwd);// int netId = mWifiManager.addNetwork(historyWifiConfig);// mWifiManager.enableNetwork(netId, true);// }// // setIpAssignment("DHCP", historyWifiConfig); //"STATIC" or "DHCP" for dynamic setting// // mWifiManager.updateNetwork(historyWifiConfig); //apply the setting// }}类中注释高级选项处,是连接上wifi同时自己设定ip.记得wifiManager.updateNetwork(wifiConfig);类中boolean bRet = wifiManager.enableNetwork(netID, true); 第二个参数true表示如果当前已经有连上一个wifi,要强制连到自己设定的wifi上,此参数必须为true否则连上的还是原来的wifi.调用此类示例 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConnect wifi = new WifiConnect(wifiManager); wifi.Connect("wifiName", "wifipPassword", WifiCipherType.WIFICIPHER_WPA);需要的权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /><uses-permission android:name="android.permission.WAKE_LOCK" />如何在广播监听wifi的状态广播接收类package rodar.rgs.conference.utils;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.NetworkInfo;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Bundle;import android.os.Parcelable;import android.util.Log;public class WifiStateReceiver extends BroadcastReceiver{// 0 --> WIFI_STATE_DISABLING// 1 --> WIFI_STATE_DISABLED// 2 --> WIFI_STATE_ENABLING// 3 --> WIFI_STATE_ENABLED// 4 --> WIFI_STATE_UNKNOWN @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Bundle bundle = intent.getExtras(); int oldInt = bundle.getInt("previous_wifi_state"); int newInt = bundle.getInt("wifi_state"); System.out.println(">>>oldInt="+oldInt+",newInt="+newInt);// String oldStr = (oldInt>=0 && oldInt<WIFI_STATES.length) ?WIFI_STATES[oldInt] :"?";// String newStr = (newInt>=0 && oldInt<WIFI_STATES.length) ?WIFI_STATES[newInt] :"?";// Log.e("", "oldS="+oldStr+", newS="+newStr);// if(newInt==WifiManager.WIFI_STATE_DISABLED || newInt==WifiManager.WIFI_STATE_ENABLED) {// onWifiStateChange(); // define this function elsewhere!// } else if(newInt==WifiManager.WIFI_STATE_DISABLING ||// newInt==WifiManager.WIFI_STATE_ENABLING)// {//// chkbox_wifi.setText(newStr);// } else {// newStr += " (Is wpa_supplicant.conf readable?)";//// chkbox_wifi.setText(newStr);// } WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifiManager.getConnectionInfo(); System.out.println(">>>onReceive.wifiInfo="+info.toString()); System.out.println(">>>onReceive.SSID="+info.getSSID());// if(!info.getSSID().equals("Rodar")){// WifiConnect wifi = new WifiConnect(wifiManager);// wifi.Connect("Rodar", "rodar.5779858",// WifiCipherType.WIFICIPHER_WPA); // System.out.println(">>>onReceive.SSID1="+info.getSSID());// } if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (null != parcelableExtra) { NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; switch (networkInfo.getState()) { case CONNECTED: Log.e("APActivity", "CONNECTED"); break; case CONNECTING: Log.e("APActivity", "CONNECTING"); break; case DISCONNECTED: Log.e("APActivity", "DISCONNECTED"); break; case DISCONNECTING: Log.e("APActivity", "DISCONNECTING"); break; case SUSPENDED: Log.e("APActivity", "SUSPENDED"); break; case UNKNOWN: Log.e("APActivity", "UNKNOWN"); break; default: break; } } } }// // 显示Wifi状态以及ip地址:// public static String StringizeIp(int ip) {// int ip4 = (ip>>24) & 0x000000FF;// int ip3 = (ip>>16) & 0x000000FF;// int ip2 = (ip>> 8 )& 0x000000FF;// int ip1 = ip & 0x000000FF;// return Integer.toString(ip1) + "." + ip2 + "." + ip3 + "." + ip4;// }// private void onWifiStateChange() {// String ip_str = "";// WifiInfo info = mMainWifi.getConnectionInfo();// if(info != null) {// int ipaddr = info.getIpAddress();// ip_str = " (ip="+StringizeIp(ipaddr)+")";// }// // if(mMainWifi.isWifiEnabled()==true)// chkbox_wifi.setText("Wifi is on [" + ip_str + "]");// else// chkbox_wifi.setText("Wifi is off");// // }}注册和取消广播一般在onstart和onstop里 WifiStateReceiver wifiStateReceiver; @Override protected void onStart() { //注册网络监听 wifiStateReceiver = new WifiStateReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); registerReceiver(wifiStateReceiver, filter); super.onStart(); } @Override protected void onStop() { //注销网络监听 unregisterReceiver(wifiStateReceiver); super.onStop(); }
关于广播监控wifi开关还是连接状态可以看这个连接
http://www.cnblogs.com/wanghafan/archive/2013/01/10/2855096.html
0 0
- wifi 工具代码
- wifi 设置工具
- 五十三 wifi配置工具
- Wifi 工具类
- C++ wifi共享工具
- wifi工具类
- WifiUtils wifi工具类
- wifi扫描工具
- WifiUtils wifi工具类
- Android WIFI工具类
- wifi破解工具
- LANs.py:一款可以实现代码注入,无线渗透和WiFi用户监控的强大工具
- Android WIFI连接开发 WIFI工具类
- android WiFi 开关代码
- Android wifi开关代码
- 一段WiFi代码
- android连接wifi代码
- android 代码连接 wifi
- 【leetcode】26. Remove Duplicates from Sorted Array
- android studio解决导包冲突
- BP神经网络的实现
- JSP+Servlet+oracle 的一个分页查询小应用
- TD-LTE VPN构筑无线超宽带专属通道
- wifi 工具代码
- 仿小米卸载程序时图标的爆炸效果
- JavaScript学习笔记四:对象
- 面试题2:C++实现Singleton单例模式
- 蓝牙attribute protocol
- 深入理解Java内存模型——volatile
- windos下配置 sublime text+quick3.5 开发环境
- python定时杀进程
- C#中制作启动窗体的方法和问题