android 獲取wifi列表,如果你忽略了這個細節,可能你的軟件會崩潰


一:業務描述

      最近公司有一個小需求,用戶點擊wifi掃描按鈕(注意:是用戶主動點擊wifi掃描按鈕),app去掃描附近的wifi,顯示在listView中,僅此而已,app都不用去連接某個wifi,看似簡單的需求,如果沒處理好,可能導致app直接掛掉。

二:代碼如下

  注冊接收掃描wifi的廣播

private void registerBroadcast(){
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mContext.registerReceiver(mBroadcastReceiver,intentFilter);
 }

  啟動掃描

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.scanWifi:
               if (!wifiManager.isWifiEnabled()) {
                    //開啟wifi
                    wifiManager.setWifiEnabled(true);
                }
                wifiManager.startScan();
                wifiSsidRightIcon.setEnabled(false);
                break;
        }
    }        

  獲取掃描結果的廣播

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
               String resultAction = intent.getAction();
               Logger.e(TAG+"收到wifi相關的廣播:"+resultAction);
//其它業務代碼省略,如顯示出一共有多少個wifi熱點,以及刷新wifi熱點的列表
} }

 三:問題描述

        開發完成后,同事在測試該模塊的時候,直接告訴我,app還沒點擊掃描wifi就掛了,我過去看到app的確掛了,是每次必掛,然而我通過記錄的日志,看到如下信息:

    
          03-19 15:42:56.471 2112-2112/com.advert E/PRETTYLOGGER: ║    ConfigHelperFragment$2.onReceive  (ConfigHelperFragment.java:376)
                 03-19 15:42:56.471 2112-2112/com.advert E/PRETTYLOGGER: ║ ConfigHelperFragment:收到wifi相關的廣播:android.net.wifi.SCAN_RESULTS
                 03-19 15:42:56.487 2112-2112/com.advert I/PRETTYLOGGER: ║    ConfigHelperFragment$2.onReceive  (ConfigHelperFragment.java:387)
                 03-19 15:42:56.488 2112-2112/com.advert I/PRETTYLOGGER: ║ ConfigHelperFragment:掃描結果:Router-DK
                 03-19 15:42:58.838 2112-2112/com.advert E/PRETTYLOGGER: ║    ConfigHelperFragment$2.onReceive  (ConfigHelperFragment.java:376)
                 03-19 15:42:58.839 2112-2112/com.advert E/PRETTYLOGGER: ║ ConfigHelperFragment:收到wifi相關的廣播:android.net.wifi.SCAN_RESULTS
                 03-19 15:43:06.496 2112-2112/com.advert E/PRETTYLOGGER: ║    ConfigHelperFragment$2.onReceive  (ConfigHelperFragment.java:376)
                 03-19 15:43:06.496 2112-2112/com.advert E/PRETTYLOGGER: ║ ConfigHelperFragment:收到wifi相關的廣播:android.net.wifi.SCAN_RESULTS
                 03-19 15:43:06.515 2112-2112/com.advert I/PRETTYLOGGER: ║    ConfigHelperFragment$2.onReceive  (ConfigHelperFragment.java:387)
                 03-19 15:43:06.515 2112-2112/com.advert I/PRETTYLOGGER: ║ ConfigHelperFragment:掃描結果:YTC
     

       以上信息是,點擊掃描wifi后,收到wifi掃描到結果的廣播,關鍵是根本沒有手動去點擊啟動掃描,還是收到了這個廣播,並且是連續的收到這個廣播,當時有點懵了,百度后也沒找到類似的問題。靜下心來仔細一想,肯定是其它程序觸發了wifi掃描,所以才收到這個廣播,但也說不過去,為什么會不停的收到這個廣播呢?於是,我打開設置-WLAN,看到如下一幕:

     上圖是我連續看了近30秒,系統自帶wifi列表,仔細看圖一和圖二第三項,wifi列表發生了變化,看到這里,導致軟件掛掉的原因算是找到了,因為android設備wifi打開后,會自動掃描附近的wifi,如果有可用的wifi,設備直接連接,如果沒有可用的wifi,設備會繼續搜索,直到關閉wifi,或者搜索到可用的wifi為止。

      為什么我本地沒有出現問題,而同事測試就出現了,正是因為我測試的設備,已經連接上一個可用wifi熱點,而同事的設備是新的,並且之前打開了wifi開關,所以導致了他測試時,app掛掉。知道是這個原因,解決這個問題就簡單了,進入這個activity時,判斷一下,如果當前wifi是打開的,直接關閉就ok.

     代碼如下:

  

 
         
public static void closeWifi(WifiManager wifiManager) {
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
}
}
 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM