
但Wifi卻是顯示已連線, 只有關掉再開才能連線?

我已找到暫時的解決方法, 但需要root的,
所以想看看有多少人有相同問題, 再決定寫不寫出來.
--------------------------------------------------------
放到Android Market了,
請搜尋 "DROID/MS WifiPowerSavingOff".
Barcode 在這:

新版支援了自動檢查Wifi連接.
注意:
-需要ROOT !
-這不同於系統中的"Wifi Sleep Policy", 系統中的"Wifi Sleep Policy" 只是用於設定是否於螢幕關閉後, 關掉Wifi, 但Wifi Power Saving 是Driver中的東西, 跟"Wifi Sleep Policy"無關.
-由於每次Wifi連接後, 系統都會將Wifi Power Mode 設定為Auto Sleep Mode, 所以需要每次Wifi連接後執行.
-自動檢查連接, 啟動自動檢查後, 每次Wifi連接後都會自動執行一次, 如果執行失敗, 會於幾秒後重試, 直到成功 或 Wifi 關閉 或 關閉自動檢查. 所以, 並不會消耗更多的電量.
-記得給予該程序 super user permission 為 "Always", 否則系統會不斷詢問, 而且不能設定Power Saving Mode.
--------------------------------------------------------
我研究了Motorola Owner Forum 很久了,
其中裡面有一位user提出, root後關掉Wifi Power Saving Mode 後, 問題就解決了,
但由於要root, 沒人試 & 沒有人回應, 我試了後果然真的解決了!
原文在這:
https://supportforums.motorola.com/message/105858;jsessionid=8990D618669CAD49EB83B509F91FF0E7.node0
是由一位叫"javidroid"的user提出的, 非常感謝!
我猜想部份router(AP)有問題, 部份沒問題, 是由於router的相容性問題!
由於Milestone每次Wifi連接後, 會設成Power Mode Auto,
每過一段時間, 當Wifi進入Sleep Mode 後 (只是wifi), 就會不回應Router (AP) 的訊號,
Router(AP) 就會將手機連接斷開.
當Milestone Wifi 醒來後, 並不會向Wifi重新要求連接,
而是當作沒事發生繼續連接, 這時候Router(AP) 不會接受.
可能部份router接受這種連接方式, 沒有問題,
但部份則不會接受, 就會發生問題.
在之前, 家中某一位置上網, 5-10 分鐘內一定斷,
關掉power saving後, 沒斷過!
而且一直開著, 把 "Wifi Sleep Policy" set去 "Never" 後,
關掉螢幕一整晚也沒斷過!
關掉power saving前, ping time 非常不穩, 每5次都會有3-4 次是>= 200 ms,
關掉後, 非常穩定的持續11ms......
方法是在root後, 安裝 Android Terminal Emulator, 再執行以下操作:
1.) 開啟wifi, 等待 Wifi 連接成功後, 才執行以下操作
2.) 打入 "su" 再按enter, 會詢問是否允許執行, 按"Always".
3.) 返回terminal 後, 會看到卡住了, 只要按Menu -> Exit (or Reset Term) 後, 重新開啟即可.
(重開terminal後要再打入"su"再按enter)
4.) 如果已有 superuser 權限, prompt會變成 "#".
5.) 打入"wlan_cu" 後按enter
6.) 按 "w" enter, "p 1" enter, 會把Power Mode 變成 "1 = Active".
(預設是 0 = Auto)
7.) 按".." 返回上一個目錄, 再"q" enter 退出, 之後就可以了!
*** 要注意的是, 經查看Android Source Code "WifiStateTracker.java", 每次Wifi 成功連接後 (or say DHCP IP acquired), Android 會將Wifi Power Mode 設定成AUTO, 是每一次連接後也會設定成AUTO. 所以每次連接後, 都要重新執行以上操作 ***
由於太麻煩了, 所以我寫了一個App, 用來執行以上操作, 原理很簡單, 只是幫你執行以上的指令(echo -e "W\nP 1\n" | /system/bin/wlan_cu)!
但目前要手動操作 (開App按button), 如果真的有需要, 我可以改寫成每次wifi連接後自動執行一次.
稍後會放上Market, 但由於不確定其他手機會否有"wlan_cu"指令,
所以我會限制只有Milestone才可使用.
---------------------------------