一:業務描述java
最近公司有一個小需求,用戶點擊wifi掃描按鈕(注意:是用戶主動點擊wifi掃描按鈕),app去掃描附近的wifi,顯示在listView中,僅此而已,app都不用去鏈接某個wifi,看似簡單的需求,若是沒處理好,可能致使app直接掛掉。android
二:代碼以下app
註冊接收掃描wifi的廣播ide
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; } }
獲取掃描結果的廣播spa
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String resultAction = intent.getAction(); Logger.e(TAG+"收到wifi相關的廣播:"+resultAction);
//其它業務代碼省略,如顯示出一共有多少個wifi熱點,以及刷新wifi熱點的列表
} }
三:問題描述.net
開發完成後,同事在測試該模塊的時候,直接告訴我,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,看到以下一幕:code
上圖是我連續看了近30秒,系統自帶wifi列表,仔細看圖一和圖二第三項,wifi列表發生了變化,看到這裏,致使軟件掛掉的緣由算是找到了,由於android設備wifi打開後,會自動掃描附近的wifi,若是有可用的wifi,設備直接鏈接,若是沒有可用的wifi,設備會繼續搜索,直到關閉wifi,或者搜索到可用的wifi爲止。blog
爲何我本地沒有出現問題,而同事測試就出現了,正是由於我測試的設備,已經鏈接上一個可用wifi熱點,而同事的設備是新的,而且以前打開了wifi開關,因此致使了他測試時,app掛掉。知道是這個緣由,解決這個問題就簡單了,進入這個activity時,判斷一下,若是當前wifi是打開的,直接關閉就ok.
代碼以下:
public static void closeWifi(WifiManager wifiManager) {
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false); }}