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:
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);
According to documentation WifiManager.WifiLock
Allows an application to keep the Wi-Fi radio awake. Normally the Wi-Fi radio may turn off when the user has not used the device in a while. Acquiring a WifiLock will keep the radio on until the lock is released. Multiple applications may hold WifiLocks, and the radio will only be allowed to turn off when no WifiLocks are held in any application.
I guess you need this lock. Acquire this lock if the device is connected to WiFi. But please
Note that WifiLocks cannot override the user-level "Wi-Fi Enabled" setting, nor Airplane Mode. They simply keep the radio from turning off when Wi-Fi is already on but the device is idle.
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:
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With