2014-04-08 5 views
0

Я видел много учебников для создания AlarmManager и создания уведомления в определенную дату, но мне было интересно, как это сделать за X дней до этого.Android - как настроить будильник за X дней до определенной даты

Например, если у меня есть событие на 8 января 2014 года, и я хочу, чтобы установить его на неделю раньше до 1 января 2014 года, я бы просто установить будильник, как это:

Calendar calendar = Calendar.getInstance(); 

calendar.set(Calendar.MONTH, 1); 
calendar.set(Calendar.YEAR, 2013); 
calendar.set(Calendar.DAY_OF_MONTH, Day-7); 

calendar.set(Calendar.HOUR_OF_DAY, 0); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
calendar.set(Calendar.AM_PM,Calendar.AM); 

Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0); 

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

Однако то, что если событие было 4 января 2014 года, то я хотел бы установить дату до 28 декабря 2013 года. Есть ли функция, которая может это сделать? Или мне нужно написать много дел?

+1

разность b/w сегодня и X дней, преобразуйте разницу в milisecond и добавьте значение в calendar.getTimeInMillis() + difference_days_into_milisecond –

+0

1 - ПОЧЕМУ ??? 2 - Вы не можете: если текущее время после аварийного времени, будильник будет срабатывать НЕМЕДЛЕННО. –

+0

1 - Потому что я хочу получить уведомление о задаче до его конкретной даты. 2 - Кроме того, это была гипотетическая дата. Не настоящая дата. Я приводил пример. – user2525236

ответ

1

получите свое текущее время в миллисекундах и вычтите нет. дней от него, здесь 1 дня = 24 * 60 * 60 * 1000 = 86400000

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, (calendar.getTimeInMillis()-(no. of days * 86400000)), pendingIntent); 
+1

Надеюсь, это вам поможет, если есть какие-либо вопросы, связанные с этим, вам будет удобно спросить. Все самое лучшее :) – codeRider

+0

Почему (calendar.getTimeInMillis() - (количество дней * 86400000)) минус? это даст вам предыдущее время с текущей даты ??? –

+0

Я имел в виду, что получить время в миллисеку дня события, а затем минус days.eg, если у вас есть событие 8 января 2014 года, и вы хотите оповещение о тревоге до 7 дней, то получите время в миллисекундах за 8 января 2014 года и вычтите 7 * 86400000 – codeRider

2

события было 4 января 2014:

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.MONTH, 0); 
calendar.set(Calendar.YEAR, 2014); 
calendar.set(Calendar.DAY_OF_MONTH, 4); 
calendar.set(Calendar.HOUR_OF_DAY, 0); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
long eventTime=calendar.getTimeInMillis();//Returns Time in milliseconds 

long oneDay=AlarmManager.INTERVAL_DAY;//Converts 24 Hrs(1 Day) to milliseconds 
int noOfDays=4 
long reminderTime=eventTime-(noOfDays*oneDay);//Time in milliseconds when the alarm will shoot up & you do not need to concider month/year with this approach as time is already in milliseconds. 

//Set alarm 
Intent myIntent = new Intent(MainActivity.this, MyReceiver.class); 
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent); 

Надеется, что это помогает!

Смежные вопросы