工作随笔---WiFi开发(2)---WIFIUtil类
来源:互联网 发布:好的淘宝零食点知乎 编辑:程序博客网 时间:2024/06/07 23:50
1.前言
上篇讲到注册相关的BroadcastReceiver以及通过BroadcastReceiver来获取WIFI的各种通知,本篇接着上一篇来解析WIFI开发的过程,现在我们需要新建操作WIFI的工具类SysManagerWIFIUtil.java.
2.开发流程
通过调用WifiManager.java中的源生接口,来封装一些符合自己需求的接口。
private static final String TAG = “WIFIUtil”; private static SysManagerWIFIUtil m_instance = null; private WifiManager mWifiManager; private WifiInfo mWifiInfo; // scanedAPList private List<ScanResult> mWifiList; // savedAPList private List<WifiConfiguration> mWifiConfiguration; private static Context m_context; public static final int TYPE_NO_SECURITY = 1; public static final int TYPE_WEP = 2; public static final int TYPE_WPAWPA2 = 3; public static final int WIFI_CONNECTED = 0x01; public static final int WIFI_CONNECT_FAILED = 0x02; public static final int WIFI_CONNECTING = 0x03; private SysManagerWIFIUtil(Context context) { m_context = context; //构造方法中获取wifimanager mWifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); } public static SysManagerWIFIUtil getInstance(Context context) { if (null == m_instance) { SysLog.out(TAG, "SysManagerWIFIUtil getInstance", "create singleton instance"); synchronized (SysManagerWIFIUtil.class) { if (null == m_instance) { m_instance = new SysManagerWIFIUtil(context); } } } return m_instance; } //打开wifi开关 public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } } //关闭wifi开关 public void closeWifi() { if (mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } //ckeck wifi的状态 //WifiManager.WIFI_STATE_ENABLED //WifiManager.WIFI_STATE_DISABLED //WifiManager.WIFI_STATE_DISABLING //WifiManager.WIFI_STATE_ENABLING //WifiManager.WIFI_STATE_UNKNOWN public int checkState() { return mWifiManager.getWifiState(); } public WifiManager getWifiManager() { return mWifiManager; } //获取已连接并保存的热点列表 public synchronized List<WifiConfiguration> getConfiguration() { // saved AP mWifiConfiguration = mWifiManager.getConfiguredNetworks(); return mWifiConfiguration; } //当前正在连接的热点的信息 public synchronized WifiInfo getConnectionInfo() { mWifiInfo = mWifiManager.getConnectionInfo(); // SysLog.out(TAG, "connect", "" + mWifiInfo.toString()); return mWifiInfo; } // connect savedAP public boolean connectConfiguration(int netid) { if (netid < -1) { return false; } SysLog.out(TAG, "SysManagerWIFIUtil enableNetwork", "start"); boolean c = mWifiManager.enableNetwork(netid, true); return c; } //连接成功热点或者删除热点时需要重新保存下configuration信息 public synchronized void saveConfiguration() { SysLog.out(TAG, "SysManagerWIFIUtil saveConfiguration", "start"); mWifiManager.saveConfiguration(); } //检索周围热点 public synchronized void startScan() { SysLog.out(TAG, "SysManagerWIFIUtil startScan", "start"); mWifiManager.startScan(); } /* * @TODO when connect hidden AP,should use this method,and set ifActive=true * @param ifActive */ public synchronized void startActiveScan(boolean ifActive) { SysLog.out(TAG, "SysManagerWIFIUtil startActiveScan", "start"); mWifiClient.startScan(ifActive); } //获取周围最新的scan到的热点列表 public synchronized List<ScanResult> getWifiList() { // scaned AP mWifiList = mWifiManager.getScanResults(); return mWifiList; } //获取当前正在连接的热点的MAC public synchronized String getMacAddress() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress(); } return null; } //获取当前正在连接的热点的BSSID public synchronized String getBSSID() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); } return ""; } //获取当前正在连接的热点的SSID public synchronized String getSSID() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID(); } return ""; } //获取已保存热点的加密方式 public synchronized int getSecurityType(WifiConfiguration config) { if ((config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || config.allowedKeyManagement.get(KeyMgmt.WPA_PSK) || config.allowedKeyManagement.get(KeyMgmt.IEEE8021X))) { SysLog.out(TAG, "SysManagerWIFIAdmin getSecurityType", "security = TYPE_WPAWPA2"); return TYPE_WPAWPA2; } return (config.wepKeys[0] != null) ? TYPE_WEP : TYPE_NO_SECURITY; } //获取当前正在连接的热点的IP public synchronized int getIPAddress() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress(); } return 0; } //获取当前正在连接的热点的networkId public synchronized int getNetworkId() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId(); } return 0; } //通过netid删除已保存的热点 public synchronized boolean deleteConfiguration(int netId) { SysLog.out(TAG, "SysManagerWIFIUtil deleteConfiguration", "start"); boolean b = mWifiManager.removeNetwork(netId); return b; } public synchronized int addNetwork(String ssid, String passwd, int type, String bssid) { SysLog.out(TAG, "SysManagerWIFIUtil addNetwork", "start"); int status = addNetwork(CreateWifiInfo(ssid, passwd, type, bssid)); return status; } // 连接新的热点 private int addNetwork(WifiConfiguration wcg) { int wcgID = mWifiManager.addNetwork(wcg); SysLog.out(TAG, "SysManagerWIFIUtil addNetwork(enableNetwork)", "start"+", netID = "+wcgID); boolean b = mWifiManager.enableNetwork(wcgID, true); getConnectionInfo(); return wcgID; } //创建将要连接的新热点信息 private WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type, String BSSID) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = toHexString(SSID.getBytes()); SysLog.out(TAG, "SysManagerWIFIUtil addNetwork", "SSID="+config.SSID); //if (null == BSSID) { //} else { // config.BSSID = BSSID; //} //if ((null != SSID)&&(null != BSSID)) { // WifiConfiguration tempConfig = this.IsExsits(SSID,BSSID); // if (tempConfig != null) { // mWifiManager.removeNetwork(tempConfig.networkId); // } //} if (TYPE_NO_PASSWD == Type) // WIFICIPHER_NOPASS { config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); } else if (TYPE_WEP == Type) { // WIFICIPHER_WEP config.hiddenSSID = true; int len = Password.length(); if ((len == 10 || len == 26 || len == 58) && Password.matches("[0-9A-Fa-f]*")) { config.wepKeys[0] = Password; } else { config.wepKeys[0] = '"' + Password + '"'; } 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; } else if (TYPE_WPA == Type) { // WIFICIPHER_WPA if (Password.matches("[0-9A-Fa-f]{64}")) { config.preSharedKey = Password; } else { 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.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } else { } return config; } //启动wps连接 public void startWps(WpsInfo config, WpsListener listener){ mWifiManager.startWps(config, listener); } //取消wps连接 public void cancelWps(ActionListener listener){ mWifiManager.cancelWps(listener); } //当前wifi是否已经连接 public int isWifiContected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifiNetworkInfo = connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (wifiNetworkInfo.isConnected()) { return WIFI_CONNECTED; } else { return WIFI_CONNECT_FAILED; } } //判断当前热点是否已经存在于保存列表 public WifiConfiguration IsExsits(String SSID,String BSSID) { List<WifiConfiguration> existingConfigs = mWifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (null != BSSID && (("\"" + SSID + "\"").equals(existingConfig.SSID)) &&(BSSID.equals(existingConfig.BSSID))) { return existingConfig; } } return null; } //断开指定的已连接的热点 public synchronized void disconnectWifi(int netId) { mWifiManager.disableNetwork(netId); if(netId == getNetworkId()){ mWifiManager.disconnect(); SysLog.out(TAG, "SysManagerWIFIUtil disconnectWifi(netID)", "Ap is disconnect = "+netId); } } /** * signalLevel divide * @param level * @param num * @return signal level(0~4) */ public int calculateSignalLevel(int level, int num) { if (level <= -100) { return 0; } else if (level >= -55) { return num - 1; } else { float inputRange = ((-55) - (-100)); float outputRange = num - 1; return (int) ((float) (level - (-100)) * outputRange / inputRange); } } /** *@TODO judge ssid whether invisible * @param ssid * @return boolean */ public boolean judgeSSID(String ssid) { char[] contentCharArr = ssid.toCharArray(); for (int i = 0; i < contentCharArr.length; i++) { if (contentCharArr[i] <= 0x20 || contentCharArr[i] == 0x7F) { } else { return true; } } return false; } /** * @TODO 将周边检索的热点的加密方式简化 * @param capabilities * @return */ public int wifiType(String capabilities) { if (capabilities.contains("[WPA2-") || capabilities.contains("[WPA-")) { return TYPE_WPAWPA2; } else if (capabilities.contains("WEP")) { return TYPE_WEP; } else { return TYPE_NO_SECURITY; } } /** * switch IP Address * @param ipAddress * @return String */ public String intToIp(int ipAddress) { return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + (i >> 24 & 0xFF); }
0 0
- 工作随笔---WiFi开发(2)---WIFIUtil类
- 工作随笔---WiFi开发(1)---WIFIBroadcastReceiver类
- 工作随笔---WiFi开发(3)---WIFIScanList类
- 工作随笔---WiFi开发(4)---WIFISavedList类
- 工作随笔---WiFi开发(5)---WIFIWpsConnect类
- IT软件开发 工作一年随笔
- 工作2个月随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 工作随笔
- 计算机专业方面的期刊介绍
- vue-router直接在html里面使用
- Python爬虫(3)——将维基百科词条导入MySQL
- plsql语法,存储过程,存储函数,触发器等概念
- C++第4次实验(基础班)—循环结构程序设计(参考答案)-项目7-4:加法算式
- 工作随笔---WiFi开发(2)---WIFIUtil类
- adb操作命令详解及大全
- mybatis中简易的多数据源
- 题目1020:最小长方形 九度OJ
- android studio 安装app一直卡在waiting for debug解决办法
- Java虚拟机学习笔记(2)——垃圾收集算法
- C++第4次实验(基础班)—循环结构程序设计(参考答案)-项目7-5:等式
- 博客的第一篇
- Git常用命令