title: How do I keep Wifi from disconnecting when phone is asleep?
body: <p>I have a service which polls a server at certain intervals. I use an AlarmManager and a BroadcastReceiver to start the service.  My problem is that after a certain duration, even though the Wifi is still enabled, but for some reason, my application can't contact the server. I get an "Unreachable network" error. </p>
  
  <p>Note that I've already acquired a partial wake lock as well as a wifilock.</p>
  
  <p>Here's my code for the BroadcastReceiver.</p>
  
  <pre><code>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!");
                  }
              }
          }
      }
  }
  </code></pre>