I am try to trigger alarm for Every day 12:00 am but why it is trigger after 10/20 minute later of 12:00 am?

67 Views Asked by At
   public void alarmUpdateForEveryDay(Context context) {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, NewDayReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 50, intent, PendingIntent.FLAG_IMMUTABLE);

        Calendar c = Calendar.getInstance();
        c.set(Calendar.HOUR_OF_DAY, 0); 
        c.set(Calendar.MINUTE, 0); 
        c.set(Calendar.SECOND, 0); 
        if (System.currentTimeMillis() > c.getTimeInMillis()) {
            c.add(Calendar.DAY_OF_MONTH, 1); // Add 1 day
        }

        long midnight = c.getTimeInMillis();

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, midnight, AlarmManager.INTERVAL_DAY, pendingIntent);
        
        Log.d("current_time", new Date(midnight).toString());
    }

I test with adjust the system time

1

There are 1 best solutions below

1
On

Please take a look at the documentation note

Beginning with API 19 (Build.VERSION_CODES.KITKAT) alarm delivery is inexact: the OS will shift alarms in order to minimize wakeups and battery use.

You should use setExact and create a repeating mechanism in your app