我需要每 x 分钟通过 WiFi 和 HTTP 从本地网络上的服务器提取数据。服务在后台运行,我使用 AlarmManager 来触发查询。设备上的 Wifi 睡眠策略设置为“从不”。
问题是,设备在屏幕关闭时进入睡眠状态,并且 wifi 锁似乎无法正确重新连接 wifi,因此查询失败。
知道这里出了什么问题吗?
执行
{...}
wakeLockUtil.lock();
//wait for wifi to connect (no idea if this is useful)
Thread.sleep(3000);
doQuery();
wakeLockUtil.unlock();
{...}
WakeLock
public WakeLockUtil(Context context) {
wifiLock = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL,
"PeriodUpdateWifiLock");
wakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"PeriodUpdateWakeLock");
}
public void lock() {
System.out.println("WakeLockUtil.lock()");
try {
wakeLock.acquire();
wifiLock.acquire();
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(), "Error getting Lock: " + e.getMessage());
}
}
public void unlock() {
System.out.println("WakeLockUtil.unlock()");
if (wakeLock.isHeld())
wakeLock.release();
if (wifiLock.isHeld())
wifiLock.release();
}
我在某些设备上发现了一些问题,其中 PARTIAL_WAKE_LOCK 和 WifiLock:WIFI_MODE_FULL_HIGH_PERF 的组合在屏幕关闭时无法完全工作。很烦人。到目前为止对我来说唯一的解决方案是使用SCREEN_DIM_WAKE_LOCK http://developer.android.com/reference/android/os/PowerManager.html#SCREEN_DIM_WAKE_LOCK.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)