我開始尋找在每個小時的時間正好重複的開始IntentService(下午1:00,下午2:00,下午3:00,等等) 。正是在小時開始啓動服務,重複每隔一小時之後
說完看了看文件,我相信使用AlarmManager做,這是最好的做法。
我有一個BootReceiver將開始第一個實例,並在下面的應用我onHandleIntent任務已經重複(例如振動下)之後的下一個鬧鐘設置。我的問題是我無法設置鬧鐘在接下來的一個小時的頂上去了,我怎麼會去嗎?
爲了測試我有報警器響了每3分鐘在下面的代碼
public class TimingAndControl extends IntentService
{ public TimingAndControl()
{
super(TimingAndControl.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent)
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "VibrateTag");
wakeLock.acquire();
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(300);
NextAlarm();
}
private void NextAlarm()
{
Intent intent = new Intent(this, this.getClass());
PendingIntent pendingIntent =
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// The update frequency should often be user configurable. This is not.
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis + 3 * (60 * 1000);
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
if (nextUpdateTime.hour < 6 || nextUpdateTime.hour >= 18)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
}
@Override
public void onCreate(){
Toast.makeText(this, "service starting", (10 * 1000)).show();
super.onCreate();
}
@Override
public void onDestroy() {
Toast.makeText(this, "service stopping", (10 * 1000)).show();
super.onDestroy();
}
}
服務需要在每個小時的頂部完全觸發,我是否能夠通過這樣做來保持我需要的準確性。此外,我怎麼會去計算時間時的下一個頂部是的,我會是最好的送行發言權12:00 PM設置一個報警,並從那裏重複報警?抱歉,我發現AlarmManager很難與 – user1001160 2012-01-11 13:08:47
@ user1001160握手:「我能否通過這樣做來保持我需要的準確性」 - 如果您使用「RTC_WAKEUP」或「ELAPSED_REALTIME_WAKEUP」,它會相當準確'。話雖這麼說,Android是不是一個RTOS和時鐘漂移等。「此外,我將如何去計算何時小時的下一個頂部是」 - 使用'java.util.Calendar',因爲這是普通的Java,沒什麼Android獨有。 「我會最好在下午12點設置下一個鬧鐘,並從那裏重複鬧鐘?」 - 我肯定會在這個場景中使用'setRepeating()'。 – CommonsWare 2012-01-11 13:40:12
太好了,我想我已經想通了。感謝您的幫助! – user1001160 2012-01-11 16:30:32