Задайте AlarmManager от DatePicker и TimePicker

Много съм блокиран при създаването на аларма от DatePicker и TimePicker...

Това е кодът на моя опит:

Calendar cal=Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());
cal.set(Calendar.MONTH, datePicker.getMonth());
cal.set(Calendar.YEAR, datePicker.getYear());
cal.set(Calendar.HOUR, timePicker.getCurrentHour());
cal.set(Calendar.MINUTE, timePicker.getCurrentMinute());        
long millis=cal.getTimeInMillis();

Intent intent=new Intent(CalendarView.this,AvisoReceiver.class);
PendingIntent mAlarmSender=PendingIntent.getBroadcast(CalendarView.this,23454546, intent,0);
AlarmManager alm=(AlarmManager)getSystemService(ALARM_SERVICE);
alm.set(AlarmManager.RTC_WAKEUP, millis,mAlarmSender);      

Но когато настроя алармата си от TimePicker и DatePicker, приемникът ми не се обажда.

Ако настроя алармата си 3 секунди след обаждането на приемника и получа известието си.


person Rafael Carrillo    schedule 13.05.2012    source източник
comment
Мисля, че сега го реших.   -  person Sam    schedule 14.05.2012
comment
Реших временно изваждане на 12 часа хехехе .. знам, че не е най-доброто решение, но все още работя.   -  person Rafael Carrillo    schedule 14.05.2012


Отговори (1)


Пренаписване

Така че, когато програмирам в 2 сутринта, не винаги съм на върха на играта. Ето две поправки, които да добавите към вашия код, за да получите поведението, което очаквате (24/7):

cal.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
cal.set(Calendar.SECOND, 0);

Използвайте HOUR_OF_DAY, за да прочетете 24 часа, и SECOND, за да зададете секундата на :00. HOUR отчита само 12 часа време, затова е работил в 2 сутринта, а не в 7 вечерта и защо е бил с 43 000 секунди (12 часа). Без настройка SECOND на обекта Calendar той ще пренесе текущите минути в секунда, създавайки неочаквано забавяне.

Като странична бележка, можете също да зададете всички стойности на календара наведнъж:

cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);

Независимо от начина, всичко, което трябва да се обадите е:

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);      

(Не, необходима е още фантастична математика като първото ми предложение.) Надявам се това да помогне!

person Sam    schedule 13.05.2012
comment
OMG благодаря! , но все още получавам известия незабавно, когато настроя алармата :/ - person Rafael Carrillo; 14.05.2012
comment
Получавам тази стойност в журнала: Разлика: -43242 - person Rafael Carrillo; 14.05.2012
comment
текущият час е 22:53 и се опитвам да настроя алармата на 22:54 или 22:55, дори и да настроя на 23:55, получавам незабавно известие - person Rafael Carrillo; 14.05.2012
comment
Изчакайте, изглежда, че е точно един месец в миналото... Използвате ли DatePicker по подразбиране? - person Sam; 14.05.2012
comment
да, не използвам външни уиджети - person Rafael Carrillo; 14.05.2012
comment
Хм, получавам същите разлики. Знам, че това проработи късно снощи. ... Какво ни липсва? - person Sam; 14.05.2012
comment
когато настроя алармата си този ден в 23:17 (когато е 23:15), работи, но трябва да избера сутрин, а не следобед - person Rafael Carrillo; 14.05.2012
comment
използвам конвертор от милисекунди към дата и използването на PM добавя 12 часа към времето - person Rafael Carrillo; 14.05.2012
comment
Мислех си, че късно снощи... Освен това открих, че можете да направите cal.set(Calendar.SECOND, 0); Това може да помогне. - person Sam; 14.05.2012
comment
За съжаление сега трябва да приготвя вечеря. Ако първо не намерите решение, аз ще разреша това по-късно. - person Sam; 14.05.2012
comment
Добре, няма проблем, благодаря ви!! :D Ще работя около този проблем - person Rafael Carrillo; 14.05.2012
comment