WiFi と HTTP を介して x 分ごとにローカル ネットワーク上のサーバーからデータを取得する必要があります。サービスはバックグラウンドで実行されており、AlarmManager を使用してクエリをトリガーします。Wifi スリープ ポリシーは、デバイスで「しない」に設定されています。
問題は、画面がオフのときにデバイスがスリープ状態になり、wifi ロックが wifi を適切に再接続していないように見えるため、クエリが失敗することです。
ここで何が間違っているのですか?
実行
{...}
wakeLockUtil.lock();
//wait for wifi to connect (no idea if this is useful)
Thread.sleep(3000);
doQuery();
wakeLockUtil.unlock();
{...}
ウェイクロック
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();
}