0

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();
}
4

1 に答える 1

4

一部のデバイスで、画面がオフのときに PARTIAL_WAKE_LOCK と WifiLock:WIFI_MODE_FULL_HIGH_PERF の組み合わせが完全に機能しないという問題が発生しました。とてもうるさい。これまでの唯一の解決策は、SCREEN_DIM_WAKE_LOCKを使用することです。

于 2013-03-21T09:34:18.597 に答える