I have tried most of the solution provided on StackOverflow and google about AlarmManager for Marshmallow OS. But I didn;t get the solution.
Code:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent alarmIntent = new Intent(context, UpdateTables.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar alarmStartTime = Calendar.getInstance();
//midnight
alarmStartTime.set(Calendar.HOUR_OF_DAY, 0);
alarmStartTime.set(Calendar.MINUTE, 1);
alarmStartTime.set(Calendar.SECOND, 0);
if (Calendar.getInstance().getTimeInMillis() > alarmStartTime.getTimeInMillis()) {
Log.i("Current time ", Constants.getDate(Calendar.getInstance().getTimeInMillis(),"yyyy-MM-dd HH:mm:ss.SSS"));
alarmStartTime.add(Calendar.DATE, 1);
}
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMills(), pendingIntent);
BroadcastReceiver
public class UpdateTables extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
When I am closing the app then the set alarm is removed from the scheduled alarm list:
./adb shell dumpsys alarm
So I have created the service that calls AlarmManager again onTaskRemoved() from recent apps:
public class myService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
setTheTimeToUpdateTables(getApplicationContext());
super.onTaskRemoved(rootIntent);
}
}
Solution Tried:
- Add the app to the autostart list.
- Remove the app from battery saver list.
- Use the
WakefulBroadcastReceiverinstead ofBroadCastReciever.