First of all cancel previous alaram
private void cancelAlarm(Context context, Class aClass) {
Intent intent = new Intent(context, aClass);
PendingIntent pintent = PendingIntent.getService(context, REQUEST_CODE, intent, FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pintent);
}
Then Create new alarm Like that
public static void setAlarmManager(Context context, Class aClass, String time) {
Intent intent = new Intent(context, aClass);
PendingIntent pintent = PendingIntent.getService(context, REQUEST_CODE, intent, FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// alarm.cancel(pintent);
// "auto_sync":"1","sync_time":"04:05"
String timeArr[] = time.split(":");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeArr[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(timeArr[1]));
alarm.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), INTERVAL, pintent);
}
On Devices alarm Manager not well managed. IN that case use SharedPreferences to save previous time when creating or updating new alarm manager. that saved value also useful when you will try to run your daily basis operation.