工作随笔---WiFi开发(3)---WIFIScanList类
2017-09-22 16:15
316 查看
1.前言
前两篇已经为后面开发做好了准备工作,现在我们通过WIFIUtil类 里面的封装好的接口来搭建WiFi热点检索画面,然后通过输入密码来连接热点。2.开发流程
(1).在画面onResume()时,通过handler来启动热点扫描以及数据刷新。
public List<ScanResult> m_scannedAP = new ArrayList<ScanResult>(); private Timer m_timer = null; private TimerTask m_task = null; private SysManagerWIFIUtil m_wifiUtil = null;
new Handler().postDelayed(new Runnable() { @Override public void run() { m_wifiUtil.startScan(); getUpdateNetWorkList(); // get scannedAP List m_listView.notifyDataSetChanged(); } }, 100); startTimer();//定时刷新画面上热点
public synchronized void getUpdateNetWorkList() { m_scannedAP.clear(); if (m_scannedAP == null) { m_scannedAP = new ArrayList<ScanResult>(); } List<ScanResult> result = m_wifiUtil.getWifiList(); //获取已经保存的热点列表 List<WifiRegisteredAP> device = m_wifiAPUtil.getM_registeredAP(); SysLog.out(TAG, "getUpdateNetWorkList", "registeredAPList="+device.size()); if (null != device) { for(int i = 0;i<device.size();i++){ WifiRegisteredAP reAp = device.get(i); if (null != reAp) { String SSID = reAp.getmConfig().SSID; String BSSID = reAp.getRegisteredAPBssid(); int TYPE = m_wifiUtil.getSecurityType(reAp.getmConfig()); int timestamp = reAp.getTimestamp(); if (null != result) { for (int j = 0; j < result.size(); j++) { ScanResult scAp = result.get(j); if (null != scAp) { String scBssid = scAp.BSSID; String scSsid = scAp.SSID; int scType = m_wifiUtil.wifiType(scAp.capabilities); if ((-1 != scType) && (null != scSsid) && (null != scBssid)) { // SysLog.out(TAG, "SYS_VIEW_MENU_COM_ScannedAP getUpdateNetWorkList", // "scType=" + scType+", Type="+TYPE+", scSsid="+scSsid+", SSID="+m_wifiUtil.dealSSID(SSID)+", scBssid="+scBssid+", BSSID="+BSSID); if ((scType == TYPE) && scSsid.equals(m_wifiAdmin.dealSSID(SSID)) && (0 < timestamp) && scBssid.equals(BSSID)) { result.remove(j); break; }else{ continue; } } } } } } } }else{ SysLog.out(TAG, "SYS_VIEW_MENU_COM_ScannedAP getAllNetWorkList", "saved device is null !!!"); } for (ScanResult sc : result) { if (null != sc) { String scSsid = sc.SSID; if (((scSsid.length() >= 1) && (scSsid.length() <= 32)) && (m_wifiUtil.judgeSSID(scSsid))) { m_scannedAP.add(sc); } } } Collections.sort(m_scannedAP, new MyCompartor()); m_wifiAPUtil.setM_scannedAP(m_scannedAP); SysLog.out(TAG, "SYS_VIEW_MENU_COM_ScannedAP getAllNetWorkList", "scannedAPSize=" + m_scannedAP.size()); }
private class MyCompartor implements Comparator { @Override public int compare(Object arg0, Object arg1) { ScanResult previousAP = (ScanResult) arg0; ScanResult nextAP = (ScanResult) arg1; int prelevel = m_wifiAPUtil .calculateSignalLevel(previousAP.level, 5); int nextlevel = m_wifiAPUtil.calculateSignalLevel(nextAP.level, 5); if (prelevel != nextlevel) { return Integer.valueOf(nextlevel).compareTo( Integer.valueOf(prelevel)); } else { return previousAP.SSID.compareTo(nextAP.SSID); } } }
private void removeTimer(){ if (m_task != null) { m_task.cancel(); m_task = null; } if (m_timer != null) { m_timer.cancel(); m_timer = null; } } private void startTimer(){ m_timer = new Timer(); m_task = new TimerTask() { @Override public void run() { m_wifiAPUtil.startScan(); m_handler.sendEmptyMessage(MESSAGEAUTOUPDATE); } }; if (m_task != null && m_timer != null) { m_timer.schedule(m_task, 6000, 6000); } } private Handler m_handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MESSAGEAUTOUPDATE: getUpdateNetWorkList(); m_listView.notifyDataSetChanged(); SysLog.out( TAG, "COM_ScannedAP handleMessage", "current time:" + (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")) .format(new Date())); break; default: break; } }; };
(2).画面正常显示扫描到的热点后,可以根据自己的选择Wifi热点,匹配正确的密码,连接wifi。连接热点时区分无加密热点和有加密的热点。
①无加密的热点
m_wifiUtil.disconnectWifi(); int isconnect = m_wifiUtil.addNetwork(scResult.SSID, "", m_wifiUtil.wifiType(scResult.capabilities)); m_wifiAPUtil.setScBssid(scResult.BSSID); SysLog.out(TAG, "COM_ScannedAP listViewListener", "netID=" + isconnect); if (isconnect > -1) { int netID = isconnect; m_wifiAPUtil.setNetID(netID); SysManagerCommonIF.instance().dealWifiConnectTimeOut(); } else { SysLog.out(TAG, "COM_ScannedAP onItemClickForIDPosition", "connect failure"); }
②有加密的热点
if (WifiManager.WIFI_STATE_ENABLED == m_wifiUtil.checkState()) { m_wifiUtil.disconnectWifi(); int sta = m_wifiUtil.addNetwork( m_scanedAPList.get(pos).SSID, input, wifiType(m_scanedAPList.get(pos).capabilities)); m_wifiAPUtil.setScBssid(m_scanedAPList .get(pos).BSSID); setScreenType(); if (sta > -1) { SysLog.out(TAG, "COM_PassWordEntry IButtonActionListener", "netWorkID=" + sta); netID = sta; m_wifiAPUtil.setNetID(netID); m_wifiAPUtil.setPasswordForward(true); } else { SysLog.out(TAG, "COM_PassWordEntry IButtonActionListener", "connect failure(input error)"); } }
相关文章推荐
- 工作随笔---WiFi开发(4)---WIFISavedList类
- 工作随笔---WiFi开发(1)---WIFIBroadcastReceiver类
- 工作随笔---WiFi开发(5)---WIFIWpsConnect类
- 工作随笔---WiFi开发(2)---WIFIUtil类
- IT软件开发 工作一年随笔
- Android插件化开发之动态加载基础之ClassLoader工作机制
- android开发工作中经常使用的TabWidget标签分页
- 工作项目总结(三)之web开发
- 整车控制器VCU开发详细流程以及一些核心工作
- 开发Wap中的随笔
- 微信支付开发准备工作和详细步骤
- 程序员找不到开发工作的6大原因
- 24岁IT入门,做 CRM 系统运维,前景如何?想换工作转开发靠谱吗?
- 前端开发工作必备
- 这个asp.net 快速开发平台可以让你按时下班,挺高工作效率,走向人生巅峰!
- 92、敏捷开发工作流程图
- 随笔2:开发任务的分解过程
- SharePoint 2013 开发——Provider-hosted APP准备工作
- 无责任Windows Azure SDK .NET开发入门篇一[Windows Azure开发前准备工作]