1

我正在使用带有 ICS 的三星 Galaxy。

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

4

3 回答 3

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);
于 2012-07-16T13:23:21.930 回答
0

尝试进入 Wifi 设置,按菜单按钮并选择高级。在那里你会找到一个管理 wifi 睡眠策略的项目。
此外,如果 WIFI_SLEEP_POLICY_NEVER 不起作用,请检查您是否有权访问http://developer.android.com/reference/android/Manifest.permission.html。我不知道你应该使用哪一个,也许WRITE_SYNC_SETTINGSACCESS_WIFI_STATE、、、或。CHANGE_NETWORK_STATECHANGE_WIFI_MULTICAST_STATECHANGE_WIFI_STATE

于 2012-07-16T13:18:16.497 回答
0

我发现这篇 SO 帖子显然在 Android Bug Tracker 上有很多关于该问题的错误,即使有锁和权限也可能发生。


就我而言,我设法使 Lock 与我可以测试的所有设备一起工作。不知道你是如何尝试实现它的,所以这是我在互联网上找到的一个版本(对不起,如果我找不到作者)。

注意:由于我在 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-05-21T20:36:48.277 回答