我正在使用三星Galaxy和ICS。
我正在开发一个SIP客户端。一旦手机进入睡眠模式,客户端就会失去与服务器的连接。已经尝试过来自Android市场的“WIFI Lock”应用程序并尝试设置WIFI_SLEEP_POLICY_NEVER但到目前为止没有成功。有没有人过去以编程方式解决这种连接问题?我需要连接互联网。打赌它是移动数据/ WIFI,因为我不能失去与服务器的连接。
答案 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_SETTINGS
,ACCESS_WIFI_STATE
,CHANGE_NETWORK_STATE
,CHANGE_WIFI_MULTICAST_STATE
或CHANGE_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;
}