当手机进入睡眠模式时,会丢失数据[3G / WIFI]连接

时间:2012-07-16 13:05:13

标签: android wifi sip 3g

我正在使用三星Galaxy和ICS。

我正在开发一个SIP客户端。一旦手机进入睡眠模式,客户端就会失去与服务器的连接。已经尝试过来自Android市场的“WIFI Lock”应用程序并尝试设置WIFI_SLEEP_POLICY_NEVER但到目前为止没有成功。有没有人过去以编程方式解决这种连接问题?我需要连接互联网。打赌它是移动数据/ WIFI,因为我不能失去与服务器的连接。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试进入Wifi设置,按菜单按钮并选择高级。在那里你会找到一个管理wifi睡眠政策的项目。
另外,如果WIFI_SLEEP_POLICY_NEVER无效,请查看您是否有http://developer.android.com/reference/android/Manifest.permission.html的权限。我不知道你应该使用哪一个,可能是WRITE_SYNC_SETTINGSACCESS_WIFI_STATECHANGE_NETWORK_STATECHANGE_WIFI_MULTICAST_STATECHANGE_WIFI_STATE

答案 2 :(得分:0)

我发现this SO post显然在Android Bug Tracker上存在许多错误,即使使用锁定和权限也可能发生错误。


在我的情况下,我设法让Lock与我可以测试的所有设备一起工作。不确定你是如何尝试实现它的,所以这是我在互联网上找到的一个版本(抱歉,如果我找不到作者)。

注意:我的版本可能与Java版略有不同,因为我在C#中使用Xamarin Android,但逻辑应该保持不变。

首先,您必须添加锁定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;
}