【Android開發—智慧家居系列】(三):手機連線WIFI模組
阿新 • • 發佈:2018-11-07
【Android開發—智慧家居系列】(三):手機連線WIFI模組
概述
實現連線WIFI的功能會用到一個工具類,原始碼可以點選連結下載。網上這些類似的工具類裡的程式碼差不多是一樣的。連線無線網主要有兩個方法:
其中有一個Connect方法,還有一個connectSpecificAP方法,對於不需要密碼就能連結的WIFI模組,我使用的是後者。
主要步驟
連線WIFI大致分為一下幾個步驟:
【1】開啟WIFI
openWifi
【2】配置網路資訊
createWifiInfo返回WIFiConfig
【3】新增配置好的網路並連線
int netID = mWifiManager.addNetwork(wifiConfig);
boolean bRet = mWifiManager.enableNetwork(netID, false);
【4】判斷連線是否成功
上面的enableNetWork方法返回成功並不能反映手機是否真的連線成功,所以還需要呼叫isConnect方法進行判斷,針對自己的業務邏輯和場景,我又寫了一個判斷是否連線成功的方法:isWifiConnected的方法
應用
/** * 手機接入模組的WIFI網路——BLACKANTS */ private void ConnectDisplay(){ //獲得訊息物件 Message msg=mainHandler.obtainMessage(); //是否連線成功的一個標記 Boolean isConnected=false; //標誌BLACKANTS的ScanResult是否存在,true存在,false不存在 Boolean isExist=false; //使用者存放BLACKANTS的WIFI資訊 ScanResult srWifiInfo=null; //宣告一個用於臨時存放SSID的變數 String strTempSSID; /******************以下一段程式碼主要是為了獲得BLACKANTS的ScanResult(包括了它的SSID,BSSID,capabilities)*****************/ //掃描WIFI wifiAdmin.startScan(); //獲得WIFI列表 List<ScanResult> lstWiFi= wifiAdmin.getWifiList(); //如果WIFI列表為空,則說明WIFI開關未開啟,向Handler傳送訊息 if(lstWiFi==null || lstWiFi.size()==0){ msg.what=NotOpen; mainHandler.sendMessage(msg); return; } //如果列表存在,則對列表進行遍歷 if(lstWiFi!=null & lstWiFi.size()>0){ //遍歷列表,檢視BLACKANTS是否存在 for(int i=0;i<lstWiFi.size();i++){ strTempSSID=lstWiFi.get(i).SSID; //如果存在,則退出For迴圈 if((DisplaySSID).equals(strTempSSID.trim()) ){ //修改標誌位為存在 isExist=true; //將BLACKANTS的Wifi資訊放入到變數srWifiInfo中 srWifiInfo=lstWiFi.get(i); break; } } } /******************以上一段程式碼主要是為了獲得BLACKANTS的ScanResult(包括了它的SSID,BSSID,capabilities)*****************/ //預設是失敗 msg.what=Failure; //如果存在,則讓手機接入BLACKANTS-------------------V1.0 if(isExist){ if(wifiAdmin.connectSpecificAP(srWifiInfo)){ //判斷是否連線上 if(wifiAdmin.isWifiConnected(InitActivity.this,DisplaySSID)){ msg.what=Success; } } } mainHandler.sendMessage(msg); }