2015-05-19 2 views
0

Мне нужно добавить push-уведомления в приложение для Android. Уведомление должно отображаться каждый день в определенное время (например, в 13:00). Для этого я использую AlarmManager. Я регистрирую будильник, когда приложение запускается в первый раз. Но у меня проблема. Если я устанавливаю приложение на устройство, например, в 1 час 10 минут, то будильник запускается сразу после запуска моего приложения. Но это неправильно, потому что мне нужна эта тревога для запуска на следующий день, а не в текущий день. Может ли кто-нибудь помочь мне и рассказать, как установить ежедневно будильник, который должен начать работать в день с текущего дня.AlarmManager с флагом AlarmManager.INTERVAL_DAY выполняется в текущий день, а не на следующий день

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

private void registerAMAlarmManger(){ 
    mAMAlarmIntent = new Intent(this, AMAlarmReceiver.class); 
    mAMPendingIntent = PendingIntent.getBroadcast(this, 0, mAMAlarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    SharedPreferences sPrefs = getSharedPreferences(Constants.PREFERENCES_NAME, Context.MODE_PRIVATE); 
    int amTime = sPrefs.getInt(Constants.MORNING_TIME, 9); 

    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, amTime); 
    calendar.set(Calendar.MINUTE, 0); 

    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, mAMPendingIntent); 


} 

ответ

3

если время прошло для текущей даты он выполняет код выполнения сигнализации .Это должно быть обработано. Я делаю это следующим образом

Calendar calendar = Calendar.getInstance(); 
         calendar.setTimeInMillis(System.currentTimeMillis()); 
         calendar.set(Calendar.HOUR_OF_DAY, mytesthourofday); 
         calendar.set(Calendar.MINUTE, 
           Integer.parseInt(min_am_pm[0])); 
         // calendar.set(Calendar.AM_PM, am_pm_integer); 
         calendar.set(Calendar.SECOND, 0); 
         calendar.set(Calendar.MILLISECOND, 0); 

         if (calendar.getTimeInMillis() < System.currentTimeMillis()) { 
          calendar.add(Calendar.DAY_OF_MONTH, 1); 
         } 

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 
          calendar.getTimeInMillis(), 1000 * 24 * 60 * 60, 
          pendingIntent); 
+0

Спасибо за ответ. Я хотел бы уточнить эту часть кода «if (calendar.getTimeInMillis()

+0

И еще один вопрос: calendar.setTimeInMillis (System.currentTimeMillis()); Нужна ли эта строка кода? Потому что в некоторых руководствах о AlarmManager она отсутствует. –

+0

Да, я добавляю один день .. I.e nxt day – vaibhav

1
Calendar calendar = Calendar.getInstance(); 
         calendar.setTimeInMillis(System.currentTimeMillis()); 
         calendar.set(Calendar.HOUR_OF_DAY, mytesthourofday); 
         calendar.set(Calendar.MINUTE, 
           Integer.parseInt(min_am_pm[0])); 
         // calendar.set(Calendar.AM_PM, am_pm_integer); 
         calendar.set(Calendar.SECOND, 0); 
         calendar.set(Calendar.MILLISECOND, 0); 

         if (calendar.getTimeInMillis() < System.currentTimeMillis()) { 
          calendar.add(Calendar.DAY_OF_MONTH, 1); 
         } 

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 
          calendar.getTimeInMillis(), 1000 * 24 * 60 * 60, 
          pendingIntent); 
+0

объясните свой код, чтобы OP получал больше намеков, не просто отправляйте код –