Search code examples
androidlocationalarmmanagerwakelock

Internet connection paused after Android phone lock


I am building application which can get location using NETWORK_PROVIDER periodically in background without using GPS_PROVIDER. I am using ALARM_SERVICE and WakeLock(PARTIAL_WAKE_LOCK). but the problem which i am facing is that internet connection gets disconnected once the screen goes off. when I unlocks the phone I starts receiving the location, but when the screen goes off I am not getting the locations.

Is it because:

  1. Internet connection gets paused once the screen goes off and also when I unlocks the screen I get the USSD code messages of Data Usage, so does it means my internet connection goes off once the screen goes off?
  2. Even though the internet connection is on but location doesn't gets updated in background as the screen is in off state.

I am using GpsTracker class to get location from here and using AlarmManager get location periodically. also in LatLongBroadcastReceiver class i am fetching a location.

Intent intent = new Intent(GPSlatlongActivity.this,
                    LatLongBroadcastReceiver.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

pendingIntent = PendingIntent.getBroadcast(
        GPSlatlongActivity.this.getApplicationContext(), 0, intent,
        PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime(),
        (AlarmManager.INTERVAL_FIFTEEN_MINUTES / 15),
        pendingIntent);

Solution

  • Unless your application has a very good reason to keep a Wi-Fi connection, you should really try to respect the user's preference to disable WiFi when the screen locks. Your application will quickly cause the device to consume significantly more power by using any sort of lock. As mentioned by others, in your case, you'll need the PowerManager.PARTIAL_WAKE_LOCK to keep the CPU running (without preventing the screen from locking) and WifiManager.WakeLock to keep Wi-Fi connected.

    You'll probably find the setting causing this behaviour under the system settings for Wi-Fi, under advanced Wi-Fi settings:

    Keep Wi-Fi on during sleep

    By disabling this setting on a device with mobile data, your network location listener should still work as Android will continue to use Google's Location API in the background to resolve the device's location based on cellular towers.

    If your device is also switching off mobile data, perhaps some power-saving application is disabling it. BlueEFFICIENCY and Juice Defender are some apps that have an option for this optimization, but HTC and Sony have included some power saving options on their devices that may also be exhibiting this behavior.