2016-08-20 123 views
1

我正在创建一个简单的时间选择器对话框,并且当用户设置时间时,我将该时间存储在日历实例中。时间选择器当前和时间选择器时间之间的区别Android闹钟

public void onTimeSet(TimePicker timePicker, int i, int i1) 
{ 
    tpCalendar = Calendar.getInstance(); 
    tpCalendar.set(Calendar.HOUR_OF_DAY, i); 
    tpCalendar.set(Calendar.MINUTE, i1); 
    tpCalendar.set(Calendar.SECOND,0); 
    updateReminder(); 
} 

而且在updateReminder计算差值()方法

private void updateReminder() 
{ 
    long currTime = System.currentTimeMillis(); 
    long diff = tpCalendar.getTimeInMillis() - currTime; 
    long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diff); 

    Intent reminderIntent = new Intent(this, ReminderReceiver.class); 
     AlarmManager alarmManager = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, diff, 
      PendingIntent.getBroadcast(this, 1, reminderIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT)); 
} 

而上的差异bassed我设置报警。我在Millis中获得了正确的区别(差异变量)。但问题是,警报设置后,不管设置了什么区别,它会在5秒后通知。

在广播接收机中,我只是创建一个通知。 我会感谢任何帮助,谢谢。

回答

2

我在做这样的事情时,我(以后TimePicked)我的AlarmClock:

String[] arrTime = time.split(":"); 
int hour = Integer.parseInt(arrTime[0]); 
    int minute = Integer.parseInt(arrTime[1]); 
    GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); 
    calendar.set(GregorianCalendar.DATE, calendar.get(GregorianCalendar.DATE)); 
    calendar.set(GregorianCalendar.HOUR_OF_DAY, hour); 
    calendar.set(GregorianCalendar.MINUTE, minute); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 

    Intent intent = new Intent(this, AlarmReceiver.class); 
    intent.putExtra("message", message); 
    PendingIntent pIntent = PendingIntent.getBroadcast(this, requestCode, intent, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent); 
+0

所以,你只需设置新的时间日历并将它传递给alarmManager? –

+0

是的,刚刚挑选的时间设置为报警管理器 –

+0

好吧,我以为你需要通过两次差异。感谢它的工作。 –