2012-05-30 3 views
0

мое приложение предназначено для запуска службы в определенное время.Таймер (Alarmmanger) запускается сразу же в 12:00 - 12:59 (00:00 - 00:59)

Я использую timePicker получить Время

time.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { 

     public void onTimeChanged(TimePicker view, int hourOfDay, int min) { 
      hour = hourOfDay; 
      minute = min; 
     } 
    }); 

Вы можете нажать на кнопку, чтобы активировать alarmmanager. Затем Намерение должно начаться в это время.

public void onClick(View v) { 
      cal = Calendar.getInstance(); 
      int _hour = hour; 
      int tmpHour = cal.get(Calendar.HOUR_OF_DAY); 
      int tmpMinute = cal.get(Calendar.MINUTE); 
      // Alarm is today? 
      if (hour > tmpHour || (tmpHour == hour && tmpMinute < minute)){ 

       tmpHour *= 60; 
       _hour *= 60; 
      } 
      **// Add 24Hours to get difference. 
      else { 

       tmpHour *= 60; 
       _hour *= (_hour + 24) * 60; 
      }** 
      int minutesToAdd = (_hour + minute) - (tmpHour + tmpMinute); 
      Log.d("AlarmExample", "Need to add " + minutesToAdd + " minutes"); 
      cal.add(Calendar.MINUTE, minutesToAdd); 


      cal.set(Calendar.SECOND, 0); 
      cal.set(Calendar.MILLISECOND, 0); 

...

//alarmmanager 

      AlarmManager amanag = (AlarmManager) getSystemService(ALARM_SERVICE); 
      amanag .set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

У меня есть проблема здесь: Когда вы выбираете время между 12:00 утра и 12:59 утра, _hour * = (_hour + 24) * 60; немедленно запускает будильник, когда вы касаетесь кнопки.

Я попытался изменить его на _hour = (_hour + 24) * 60; * но это не сработало.

У вас есть идеи, как сделать это надежным?

Sincerly, Вольфен

+0

Это можно упростить, см. Здесь: http://blog.blundell-apps.com/notification-for-a-user-chosen-time/ – Blundell

ответ

0
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);  

    Intent intent = new Intent(this, OnAlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);    
    Calendar timeOff = Calendar.getInstance(); 
//time 12.19AM 
    timeOff.set(Calendar.HOUR_OF_DAY, 0); 
    timeOff.set(Calendar.MINUTE, 19); 
    timeOff.set(Calendar.SECOND, 0);  


alarmMgr.set(AlarmManager.RTC, timeOff.getTimeInMillis(), pendingIntent); 

я использовал onAlermReciver реализующего Broadcast Reciver установить его намерение, то сигнал тревога пошла вызов OnAlermReciver, это работает для меня
вы можете использовать

alarmMgr.set(AlarmManager.RTC, timeOff.getTimeInMillis(), sender); 
+0

Привет, Удая, спасибо за ваш ответ. Значит, мне не нужно вычислять миллисекунды? Я просто установил свой календарь, и он активирует мое намерение в любое время? Что произойдет, если я установлю свое время на 10 утра, а фактическое время - 11 утра? – Wolfen

+0

Время установки объекта Calender для диспетчера аварийных сигналов, оно активируется до реального времени устройства, нет необходимости вычислять метку времени, если установлен будильник 10AM и фактическое время 11Am, то он активируется на следующий день 10AM – UdayaLakmal

+0

К сожалению, это также начинает будильник сразу. – Wolfen