2012-05-30 26 views
0

我的應用程序旨在在特定時間啓動服務。定時器(Alarmmanger)立即在12AM - 12:59 AM(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; *但它不起作用。

你有什麼想法如何使這可靠嗎?

誠懇, 沃爾芬

+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它們實現廣播reciver將其設置爲意圖,隨即報警去了調用OnAlermReciver,它爲我工作
可以使用

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

嗨Udaya,謝謝你的回答。所以我不必自己計算毫秒數?我只是把我的日曆設置爲這個,它會隨時激活我的意圖?如果我將時間設置爲上午10點,實際時間爲上午11點,會發生什麼情況? – Wolfen

+0

報警管理器的日曆對象設置時間,它激活到設備的實時,不需要計算時間戳,如果報警設置10AM和實際時間11Am然後激活到第二天10AM – UdayaLakmal

+0

不幸的是,這也開始立即報警。 – Wolfen

相關問題