我正在使用Samsung Galaxy與ICS。當手機進入睡眠模式時丟失數據[3G/WIFI]連接
我正在開發一個SIP客戶端。一旦手機進入睡眠模式,客戶端就會失去與服務器的連接。已經嘗試了來自android市場的「WIFI Lock」應用程序,並試圖設置WIFI_SLEEP_POLICY_NEVER,但迄今爲止沒有成功。有沒有人過去以編程方式解決了這種連接問題?我需要啓用互聯網連接。打賭移動數據/ WIFI,因爲我不能失去與服務器的連接。
我正在使用Samsung Galaxy與ICS。當手機進入睡眠模式時丟失數據[3G/WIFI]連接
我正在開發一個SIP客戶端。一旦手機進入睡眠模式,客戶端就會失去與服務器的連接。已經嘗試了來自android市場的「WIFI Lock」應用程序,並試圖設置WIFI_SLEEP_POLICY_NEVER,但迄今爲止沒有成功。有沒有人過去以編程方式解決了這種連接問題?我需要啓用互聯網連接。打賭移動數據/ WIFI,因爲我不能失去與服務器的連接。
嘗試進入Wifi設置,按下菜單按鈕並選擇高級。在那裏你會找到一個項目來管理WiFi睡眠策略。
此外,如果WIFI_SLEEP_POLICY_NEVER不起作用,請檢查您是否有權訪問http://developer.android.com/reference/android/Manifest.permission.html。我不知道你應該使用哪一個,也許WRITE_SYNC_SETTINGS
,ACCESS_WIFI_STATE
,CHANGE_NETWORK_STATE
, CHANGE_WIFI_MULTICAST_STATE
或CHANGE_WIFI_STATE
。
在Wifi設置中,睡眠策略已經設置爲從不。 我已經用WRITE_SETTINGS&WRITE_SECURE_SETTINGS試過了WIFI_SLEEP_POLICY_NEVER,並且打印了Settings.System.putInt(getContentResolver(), Settings.System)的返回值。WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_NEVER);它返回true。不知道這個回報在這裏有什麼意義。 – 2012-07-16 13:42:29
確保在您的清單,你具有的權限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
將用於設置的Wi-Fi休眠政策,從來沒有在連接睡一個可信任的網絡。
http://developer.android.com/reference/android/Manifest.permission.html
然後你只需要做到這一點:
Settings.System.putInt(getContentResolver(),
Settings.System.WIFI_SLEEP_POLICY,
Settings.System.WIFI_SLEEP_POLICY_NEVER);
這已經嘗試過,並沒有奏效。 – 2012-07-16 13:42:53
你有清單中的許可嗎?我這樣說是因爲我測試了這個代碼和它的工作... – 2012-07-16 13:45:26
當你這樣做時,設置的結果是什麼:'android.provider.Settings.System.getInt(getContentResolver(),android.provider。 Settings.System.WIFI_SLEEP_POLICY,Settings.System.WIFI_SLEEP_POLICY_DEFAULT)' – 2012-07-16 13:53:28
我發現this SO post顯然還有約其上可能與鎖,甚至發生了Android Bug跟蹤許多錯誤權限。
在我的情況下,我設法使鎖能夠與我可以測試的所有設備一起工作。不知道你是如何試圖實現它,所以這裏是我通過互聯網找到的版本(對不起,如果我找不到作者)。
注意:由於我在C#中使用Xamarin Android,因此我的版本可能與Java版本稍有不同,但邏輯應該保持不變。
首先你要添加的權限鎖定了WIFI
<uses-permission android:name="android.permission.WAKE_LOCK" />
其次,你必須得到wifiManager
wifiManager = (WifiManager) GetSystemService(WifiService);
然後,你必須編寫代碼將收購併在解除鎖定對的時間點。
private void AquireWifiLock()
{
if (wifiLock == null)
{
wifiLock = wifiManager.CreateWifiLock(WifiMode.Full, "aTagForYourLock");
wifiLock .Acquire();
}
}
private void ReleaseWifiLock()
{
if (wifiLock == null)
{
return;
}
wifiLock .Release();
wifiLock = null;
}
我知道這確實很舊,但是你有沒有解決過這個問題? – 2014-02-28 20:11:19
這不是一個Android問題。在我們的一個線程中有一次睡眠導致了LOCK被釋放。我依稀記得確切的解決方案。 – 2016-11-07 16:55:16