1. 程式人生 > >【Android開發—智慧家居系列】(三):手機連線WIFI模組

【Android開發—智慧家居系列】(三):手機連線WIFI模組

【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);
}