Wie verhindere ich, dass die WLAN-Verbindung unterbrochen wird, wenn das Telefon schläft?

Ich habe einen Dienst, der in bestimmten Abständen einen Server abfragt. Ich benutze einen AlarmManager und einen BroadcastReceiver, um den Dienst zu starten. Mein Problem ist, dass nach einer bestimmten Zeit, obwohl das Wifi noch aktiviert ist, meine Anwendung aus irgendeinem Grund keine Verbindung zum Server herstellen kann. Ich erhalte die Fehlermeldung "Nicht erreichbares Netzwerk".

Bitte beachten Sie, dass ich bereits eine teilweise Wecksperre sowie ein Wifilock erworben habe.

Hier ist mein Code für den BroadcastReceiver.

public class ServiceAlarmBroadcastReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        WakeLock wakeLock = null;
        WifiLock wifiLock = null;
        try {
            PowerManager pm = (PowerManager) context
                    .getSystemService(Context.POWER_SERVICE);

            // acquire a WakeLock to keep the CPU running
            wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                    "MyWakeLock");
            if(!wakeLock.isHeld()){
                wakeLock.acquire();
            }

            Log.i("ServiceAlarmBroadcastReceiver", "WakeLock acquired!");


            WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL , "MyWifiLock");
            if(!wifiLock.isHeld()){
                wifiLock.acquire();
            }

            Log.i("ServiceAlarmBroadcastReceiver", "WifiLock acquired!");
            context.startService(new Intent(context, ThePollerService.class));
        } finally {
            // release the WakeLock to allow CPU to sleep
            if (wakeLock != null) {
                if (wakeLock.isHeld()) {
                    wakeLock.release();
                    Log.i("ServiceAlarmBroadcastReceiver", "WakeLock released!");
                }
            }

            // release the WifiLock
            if (wifiLock != null) {
                if (wifiLock.isHeld()) {
                    wifiLock.release();
                    Log.i("ServiceAlarmBroadcastReceiver", "WiFi Lock released!");
                }
            }
        }
    }
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage