Doze mode introduced in android marshmallow performs battery optimisations by keeping the device in sleep mode and forcing network restrictions on it.
Also the background restrictions introduced in android Oreo restrict the background apps to receive background locations only a few times per hour.
To handle both these issues and continuously track user location, app has to appear as a foreground process for the android system.
This could be achieved by starting a foreground service in the app.
Refer android docs for more information on Foreground services.
This way we can bypass both the restrictions and app can continuously receive and post locations.
Dome code:
Notification notification = new NotificationCompat.Builder(this,CHANNEL_ID) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(getString(R.string.app_name)) .setContentText(getString(R.string.tracking_now)) .setContentIntent(pendingIntent).build(); startForeground(1, notification);