我正在使用带有 ICS 的三星 Galaxy。
我正在开发一个 SIP 客户端。一旦手机进入睡眠模式,客户端就会失去与服务器的连接。尝试过安卓市场的“WIFI Lock”应用,并尝试设置WIFI_SLEEP_POLICY_NEVER,但目前没有成功。过去是否有人以编程方式解决了这种连接问题?我需要打开互联网连接。赌移动数据/WIFI,因为我不能失去与服务器的连接。
确保在您的清单中您拥有以下权限:
<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);
尝试进入 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
我发现这篇 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;
}