2017-01-09 3 views
1

Как установить будильник на следующий день, если выбранное время уже прошло? У меня есть метод, где я устанавливаю будильник, но если это время уже прошло, это просто происходит сейчас. Мне нужно, чтобы включить эту тревогу на следующий день. Как я могу изменить этот код? «Потому что этот код не работает: сигнал идет прямо сейчасКак установить будильник на следующий день, если выбранное время уже прошло

Calendar calendar = Calendar.getInstance(); 
    long now = calendar.getTimeInMillis(); 
    sharedPreferences = getPreferences(MODE_PRIVATE); 

    calendar.set(Calendar.HOUR_OF_DAY, 23); 
    calendar.set(Calendar.MINUTE, 59); 
    calendar.set(Calendar.SECOND, 59); 
    calendar.set(Calendar.MILLISECOND, 999); 
    long until = calendar.getTimeInMillis(); 

    calendar.set(Calendar.HOUR_OF_DAY, sharedPreferences.getInt(SAVED_HOUR_1, selected_hour_1)); 
    calendar.set(Calendar.MINUTE, sharedPreferences.getInt(SAVED_MINUTE_1, selected_minute_1)); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 
    long seted = calendar.getTimeInMillis(); 

    Intent intent = new Intent(getApplicationContext(), SetVolume_1.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 23, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent); 
    } else { 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent); 
    } 
+0

Oh ... Я забыл об этом – JerryLetehen

+0

if (seted> = now) { long left = до - now; long doit = ​​установленный + левый; alarmManager.setRepeating (AlarmManager.RTC_WAKEUP, doit, AlarmManager.INTERVAL_DAY, pendingIntent); } else { alarmManager.setRepeating (AlarmManager.RTC_WAKEUP, установленный, AlarmManager.INTERVAL_DAY, pendingIntent); } – JerryLetehen

ответ

0

Это довольно просто, так как у вас есть календарный экземпляр, когда вы хотите, чтобы сигнал тревоги, чтобы установить, просто получить свое время в Millis и сравнить его теперь, если он больше, то время еще не достигнуто, иначе вам просто нужно добавить день к тому же самому календарю. Реализация довольно проста, я думаю :).

EDIT Я на самом деле должен был сделать что-то подобное, и вот мой код, вы можете адаптировать его, как вам нужно, и это должно помочь вам понять эту проблему.

fun setAlarm(context: Context, interval: Long) { 
    val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager 
    val i = Intent(context, AlarmReceiver::class.java) 
    val pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT) //Flag Update Current FLAG_CANCEL_CURRENT 

    val prefTime = PreferenceManager.getDefaultSharedPreferences(context).getString(SettingsValues.NOTIFICATION_TIME_KEY, "1").toInt() 
    val calendar = Calendar.getInstance() 
    calendar.set(Calendar.HOUR_OF_DAY, prefTime) 
    calendar.set(Calendar.SECOND, 0) 
    calendar.set(Calendar.MINUTE, 0) 
    var time = calendar.timeInMillis 
    if (System.currentTimeMillis() > time) { 
     time = time + 24 * 60 * 60 * 1000 // Next day 
    } 
    am.setRepeating(AlarmManager.RTC_WAKEUP, 
      time , AlarmManager.INTERVAL_DAY, pi); 
    isActive = true 
} 

ВАЖНО Если вы посмотрите на то, как я с помощью календаря экземпляра ваш answear должен быть там. если теперь после Календаря общее время в миллисе, я добавляю полный день.

+0

Я думаю, этот код должен работать, бит это не – JerryLetehen

+0

посмотреть там goo.gl/wWgLqY – JerryLetehen

+0

см. Мое редактирование, я добавил полезный код –

0

Для установки будильника на следующий день, вы бы добавить это при настройке времени:

calendar.set(Calendar.DATE, 1); 

Чтобы легко проверить, если время уже прошло в тот же день, и только установить его на следующий день, если он прошел, проверить это следующим образом:

if(calendar.before(System.currentTimeMillis())){ 
calendar.set(Calendar.DATE, 1); 
} 

Это будет установить только календарное время, на следующий день, если время, которое было установлено прошло на текущий день.