2012-01-06 41 views
0

我希望我的應用程序在將來的某個時候執行代碼。如何使用Android的Handler.PostDelayed在特定時間發生事件?

我想做的事:

Date now = new Date(); 

    for (Date beep : scheduledBeeps) { 
     if (beep.after(now)) 
     { 
      Logger.i("adding beep"); 
      m_beepTimer.postAtTime(beepNow, beep.getTime()); 
     } 
    } 

在日誌中我可以看到加4個蜂鳴聲,但他們從來不火。我假設它與uptimeMillis有關,但我不知道該怎麼做。

+0

您是否希望它成爲未來的特定時間或特定的時間? – 2012-01-06 21:15:18

回答

1

您將不得不區分現在和beep.gettime()並將其傳遞給postattime函數。由於正常運行時間用作基準,因此如果手機進入深度睡眠狀態,則可能不準確。

beep.gettime - 現在+ SystemCLock.uptimeMillis()

應該傳遞給postattime功能

您正在傳遞一個非常大的數字相當於目前毫秒從1970年1月1日。

0

您可以使用Calendar類來設置某個時間點。

Calendar beepTime = Calendar.getInstance(); 

beepTime.set(Calendar.DAY_OF_MONTH, 2); 
beepTIme.set(Calendar.HOUR_OF_DAY, 01); 
beepTime.set(Calendar.MINUTE, 55); 
beepTime.set(Calendar.SECOND, 00); 

getInstance會將其設置爲當前時間,並且您可以更改任何您喜歡的變量,例如上面的那些變量。例如,這會在當月的第二天以1:55創建一個時間。這樣,你會設置這是與

beepTime.getTimeInMillis() 

熄滅剛剛流行的是到您的postAtTime方法

編輯時間:此外,我不知道有足夠的瞭解你的問題肯定地說,但它可能會更好地使用AlarmManager。我知道,即使程序沒有運行,這仍然有效,但我不認爲PostDelayed。如果我錯了,隨時糾正我!

相關問題