2014-04-08 62 views
0

我已經看到了很多關於創建AlarmManager並在特定日期提出通知的教程,但我想知道如何在X天前完成。Android - 如何在特定日期前X天設置鬧鐘

舉例來說,如果我有2014年1月8日的事件,我想之前,2014年1月1日一週設置它,我只想設置報警,因爲這:

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); 

但是什麼如果事件發生在2014年1月4日,那麼我想將日期設置爲2013年12月28日。是否有可以執行此操作的功能?還是我必須寫很多案例?

+1

今天和X天差異,將差異轉換爲毫秒並將該值添加到calendar.getTimeInMillis()+ difference_days_into_milisecond –

+0

1 - 爲什麼? 2 - 您不能:如果當前時間在鬧鐘時間之後,鬧鐘將立即開始播放。 –

+0

1 - 因爲我想在特定截止日期之前收到任務通知。 2 - 此外,這是一個假設的日期。不是真正的約會。我舉了一個例子。 – user2525236

回答

1

以毫秒爲單位獲取當前時間並減去no。從它的天,這裏是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

希望這可以幫助你,如果有任何與此有關的疑問是舒適ask.All最好的:) – codeRider

+0

爲什麼(calendar.getTimeInMillis() - (天數* 86400000))減號?這會給你以前的時間從當前日期? –

+0

我的意思是讓時間以毫秒爲單位,然後減去天數。如果您在2014年1月8日發生事件,並且您希望在7天前發出通知警報,然後以2014年1月8日的毫秒爲單位, 7 * 86400000 – codeRider

2

事件是在2014年1月4日:

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); 

希望這有助於!

相關問題