2013-02-13 21 views
1

我試圖每隔2分鐘掃描一次wifi網絡。我正在使用該服務。在startscan()打電話後,當手機處於「活動」或「正在使用」狀態時,我在6秒內獲得SCAN_RESULTS_AVAILABLE_ACTION。所以我可以定期掃描wifis。但是在某個時間(10分鐘)電話沒有被任何人觸動後,startscan()停止「工作」並且僅在10分鐘獲得結果之後。有人經歷過這個?startscan()在手機進入閒置狀態10分鐘後出現結果

回答

3

根據this我找到了解決方法 - 這是因爲the Wifi sleep policy。 你永遠不能設定你的無線設備進入這個睡覺:

Settings.System.putInt(getContentResolver(), 
       Settings.System.WIFI_SLEEP_POLICY, 
       Settings.System.WIFI_SLEEP_POLICY_NEVER); 

可以肯定,你在AndroidManifest.xml文件添加此權限:

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

掃描週期將是5-15s - 和這是自動的 - 你不需要撥打startscan()。有關Android掃描過程的更多信息,請參閱here
編輯:
這也許是更好的解決方案,如果您只想掃描熱點:
WIFI_MODE_SCAN_ONLY - 它可以通過激活:

WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
WifiLock wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY , "MyWifiLock"); 
if(!wifiLock.isHeld()){ 
    wifiLock.acquire(); 
} 

不要忘記將其釋放,更多關於WifiLockhere
還定義了這個權限:

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

EDIT2這個工程,以及:
您可以啓用,並定期停用WiFi:

WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
if(wm.isWifiEnabled() == false) { 
    wm.setWifiEnabled(true); 
} 

然後掃描你的廣播接收器獲得包含WIFI_STATE_ENABLED額外

+0

+1漂亮的動作後 - 看到我對'getScanResults問題();'[這裏](http://stackoverflow.com/questions/16137268/wifimanager-getscanresults-clarifications-automatic-scans-sleep-etc)。另外 - 假設您啓用無線功能,然後您想在掃描後重新啓用它 - 如果用戶在掃描時啓用了它(如果您不應該禁用它),該怎麼辦?有什麼方法可以知道嗎? – 2013-04-21 23:29:40

相關問題