2013年8月29日

【Android】Wi-Fi開啟、偵測、連線、中斷、IP轉換

今天小黑人要與大家分享的是"Wi-Fi",哈哈~光說Wi-Fi好像範圍太廣了一點,簡單來說今天小黑人是要說如何運用APP控制"Wi-Fi的開啟"、"Wi-Fi的關閉"、"Wi-Fi的偵測"、"Wi-Fi的連線",其中偵測這部分是包含掃描現在的環境下有哪些Wi-Fi訊號,以及查看手機內部已存的Wi-Fi連線資訊,也就是在APP裡做手機設定裡的Wi-Fi連線設定,當然在手機內部設定裡皆可以完成這些動作,但如果自製一個Wi-Fi掃描器相對的也較為靈活不會有太多的限制,至於要怎麼開發Wi-Fi的一些運用呢?就讓小黑人與大家繼續看下去吧~ ^^
 
1.首先要在AndroidManifest.xml加入Wi-Fi讀取權限與更改Wi-Fi權限 :
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
 
2.接下來就是在程式端(.java)控制Wi-Fi的設定囉 :
P.S.小黑人在這裡放置3個按鈕,分別是"Wi-Fi偵測","Wi-Fi連線","Wi-Fi斷線" :
//首先取得Wi-Fi服務控制Manager
WifiManager mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

※ Wi-Fi偵測 :
//先判斷是否有開啟Wi-Fi,有開啟則回傳true沒有則回傳false
if(mWifiManager.isWifiEnabled())
{
        //重新掃描Wi-Fi資訊
        mWifiManager.startScan();
        //偵測周圍的Wi-Fi環境(因為會有很多組Wi-Fi,所以型態為List)
        mWifiScanResultList = mWifiManager.getScanResults();
        //手機內已存的Wi-Fi資訊(因為會有很多組Wi-Fi,所以型態為List)
    mWifiConfigurationList = mWifiManager.getConfiguredNetworks();
        //目前已連線的Wi-Fi資訊
        mWifiInfo = mWifiManager.getConnectionInfo();
       
        for(int i = 0 ; i < mWifiScanResultList.size() ; i++ )
        {
             //手機目前周圍的Wi-Fi環境
             SSID (Wi-Fi名稱) = mWifiScanResultList.get(i).SSID ;
             LEVEL (Wi-Fi訊號強弱) = mWifiScanResultList.get(i).level) ;
        }
       
        for(int i = 0 ; i < mWifiConfigurationList.size() ; i++ )
        {
             //手機內已儲存(已連線過)的Wi-Fi資訊
             SSID (Wi-Fi名稱) = mWifiConfigurationList.get(i).SSID ;
             NETWORKID (Wi-Fi連線ID) = mWifiConfigurationList.get(i).networkId ;
        }
       
        //目前手機已連線(現在連線)的Wi-Fi資訊
        SSID (Wi-Fi名稱) = mWifiInfo.getSSID() ;
        NETWORKID (Wi-Fi連線ID) = mWifiInfo.getNetworkId() ;
        IPADRRESS (Wi-Fi連線位置) = mWifiInfo.getIpAddress() ;
        IP (Wi-Fi IP位置) = String.format("%d.%d.%d.%d", (IPADRRESS & 0xff), (IPADRRESS >> 8 & 0xff), (IPADRRESS >> 16 & 0xff),( IPADRRESS >> 24 & 0xff)) ;
}
else
{
        //把Wi-Fi開啟
        mWifiManager.setWifiEnabled(true);
        Toast.makeText(MainActivity.this, "Wi-Fi開啟中", Toast.LENGTH_SHORT).show();
}

※ Wi-Fi連線 :
//選擇欲連線的Wi-Fi ID帶入即可進行連線
int NETWORKID = 已連線過的Wi-Fi ID ;
mWifiManager.enableNetwork(NETWORKID,true);

※ Wi-Fi中斷 :
//中斷目前的Wi-Fi連線訊號
mWifiManager.disconnect();
 
以上就是簡單的Wi-Fi運用,當然其中還有很多Wi-Fi資訊與功能,如偵測時還可以判斷Wi-Fi是否為開放的或密碼加密格式等其他資訊,連線部分小黑人今天是介紹連已連線過的Wi-Fi,當然連線部分還要有連沒連線過的Wi-Fi,或者是刪除手機內的Wi-Fi資訊...等等功能,這些部分都較為進階功能,小黑人在之後的文章裡會再與大家分享Wi-Fi運用進階版 ^^ ,本篇文章以簡單的Wi-Fi運用向大家說明,大家可以試試看唷 XDD
 
如有任何問題都可以和小黑人一起交流討論喔~謝謝大家~! ^^
 

3 則留言:

  1. Great beat ! I would like to apprentice while you amend your web site, how can
    i subscribe for a blog web site? The account aided me a
    acceptable deal. I had been a little bit acquainted of this your broadcast
    provided bright clear concept

    my site :: vintage clothing & accessories

    回覆刪除
    回覆
    1. Hi there, I have already activated the subscription function of my blog. Please feel free to share with me your ideas and thanks a lot for the reminder and supports.

      刪除
    2. 版主您好
      我最近想做一個判斷 "行動網路測速" 和 "WIFI網路測速"
      判斷完後,假設行動網路較快就以行動網路上網,不知版主可以給點建議或分享一些code嗎? 感激不盡

      刪除

謝謝大家支持,有任何問題都可以和小黑人一起討論!