2012-07-16 46 views
1

我正在使用Samsung Galaxy與ICS。當手機進入睡眠模式時丟失數據[3G/WIFI]連接

我正在開發一個SIP客戶端。一旦手機進入睡眠模式,客戶端就會失去與服務器的連接。已經嘗試了來自android市場的「WIFI Lock」應用程序,並試圖設置WIFI_SLEEP_POLICY_NEVER,但迄今爲止沒有成功。有沒有人過去以編程方式解決了這種連接問題?我需要啓用互聯網連接。打賭移動數據/ WIFI,因爲我不能失去與服務器的連接。

+1

我知道這確實很舊,但是你有沒有解決過這個問題? – 2014-02-28 20:11:19

+0

這不是一個Android問題。在我們的一個線程中有一次睡眠導致了LOCK被釋放。我依稀記得確切的解決方案。 – 2016-11-07 16:55:16

回答

0

嘗試進入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_STATECHANGE_WIFI_STATE

+0

在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

1

確保在您的清單,你具有的權限:

<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); 
+0

這已經嘗試過,並沒有奏效。 – 2012-07-16 13:42:53

+0

你有清單中的許可嗎?我這樣說是因爲我測試了這個代碼和它的工作... – 2012-07-16 13:45:26

+0

當你這樣做時,設置的結果是什麼:'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

0

我發現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; 
} 
相關問題