Android WiFi開發(fā)(一)--WiFi開關與狀態(tài)監(jiān)聽

之前開發(fā)了一個WiFi,熱點相關的應用。因為對這方面也不熟悉,剛開始找資料看書,但看明白實現(xiàn)時,發(fā)現(xiàn)隨著android版本更新,相關api有較大改動,之前的代碼不能用。經過一番探索,最后實現(xiàn)出來了,現(xiàn)在把它記錄下來,希望能給需要的人一些幫助。

首先來講WiFi開發(fā)相關,那第一步肯定是如何來控制WiFi打開關閉狀態(tài),以及如何來監(jiān)聽其狀態(tài)變化。

WiFi連接控制類--WiFiManager

從官網參考可以知道它以下幾個作用:

  1. 獲取配置好的網絡,也就是之前連接過的WiFi;
  2. 對當前活動的WiFi網絡建立新連接或斷開,可以查詢有關網絡狀態(tài);
  3. 周圍掃描到的接入點,對應類為ScanResult;
  4. 定義了在Wi-Fi狀態(tài)改變后發(fā)出廣播的intent action。

可以看出主要是用它來控制監(jiān)聽WiFi狀態(tài)

打開關閉WiFi

對WiFi進行控制要聲明相關權限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

接著獲取WifiManager

mWifiManager= (WifiManager) getApplicationContext()
                .getSystemService(Context.WIFI_SERVICE);

注意這里必須使用Application的上下文,那在fragment中獲取的話通過getActivity().getApplicationContext(),因為碎片中無法直接獲取Application Context

獲取到WifiManager后就可以通過isWifiEnabled()判斷是否打開,setWifiEnabled(boolean enabled)打開或關閉wifi,它的返回值說明操作結果,可能操作失敗

//set wifi switch state
        swwifi.setChecked(mWifiManager.isWifiEnabled());

        swwifi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mWifiManager.setWifiEnabled(isChecked);
            }
        });

這里簡單的通過個switch顯示和控制開關狀態(tài)

WiFi狀態(tài)監(jiān)聽

上面只是能在應用中控制wifi開關,但如果在外面wifi發(fā)生變化,應用內沒監(jiān)聽的話,那相關顯示就錯誤了

監(jiān)聽是通過WifiManager定義的一些action動態(tài)注冊廣播監(jiān)聽(只能動態(tài)注冊)

//注冊接收器
    private void registerBroadcast() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction()== WifiManager.WIFI_STATE_CHANGED_ACTION) {
                    switch (intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN)) {
                        case WIFI_STATE_DISABLED:{
                            Toast.makeText(context, "WiFi disabled", Toast.LENGTH_SHORT).show();
                            swwifi.setChecked(false);
                            break;
                        }
                        case WIFI_STATE_DISABLING:{
                            Toast.makeText(context, "WiFi disabling", Toast.LENGTH_SHORT).show();
                            break;
                        }
                        case WIFI_STATE_ENABLED :{
                            Toast.makeText(context, "WiFi enabled", Toast.LENGTH_SHORT).show();
                            swwifi.setChecked(true);
                            break;
                        }
                        case WIFI_STATE_ENABLING:{
                            Toast.makeText(context, "WiFi enabling", Toast.LENGTH_SHORT).show();
                            break;
                        }
                        case WIFI_STATE_UNKNOWN:{
                            Toast.makeText(context, "WiFi state unknown", Toast.LENGTH_SHORT).show();
                            break;
                        }
                    }
                }
            }
        }, filter);
    }

其他一些狀態(tài)也基本是通過動態(tài)注冊廣播監(jiān)聽

上面有一點,剛打開注冊廣播時立即收到一條當前狀態(tài)的廣播

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 本文更新連接[http://www.itdecent.cn/p/a0fbb4644b84] dear 各位開發(fā)者...
    迷你小豬閱讀 8,369評論 11 19
  • 網絡連接處理 在說WiFi之前,先來說說網絡連接處理。在Android開發(fā)過程中,對于一個需要連接網絡的Andro...
    Reathin閱讀 39,592評論 19 71
  • 93年小學畢業(yè)時,我幸運地考入了地區(qū)最好的重點中學。開學第一天,一個唇紅齒白、眉清目秀的戴眼鏡的女孩子便引起了我的...
    橡柳閱讀 1,380評論 25 29

友情鏈接更多精彩內容