簡體   English   中英

我可以在Android中設置AlarmManager的結束時間嗎?

[英]Can I set an end time for AlarmManager in Android?

我已將AlarmManager設置為在特定時間關閉,然后每隔一段時間重復一次。 有多少時間可以停下來告訴它嗎? 甚至什么時候停止?

這是我到目前為止的內容:

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 13);
    calendar.set(Calendar.MINUTE, 56);
    Intent intent = new Intent(this, MyService.class);
    alarmIntent = PendingIntent.getService(this, 0, intent, 0);
    alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            1000 * 60 * 60, alarmIntent);

另外,我是否需要做任何事情以確保它每天都能正常運行? 還是已經這樣做了?

有多少時間可以停下來告訴它嗎? 甚至什么時候停止?

無法為AlarmManager指定結束時間,但是您可以做的是,每次在廣播接收器中收到未決意圖時,請檢查是否需要取消該警報。 要取消警報,您需要調用alarmManager.cancel(pendingIntent),其中pendingIntent具有與最初用於創建警報的PendingIntent相同的requestCode。

我是否還需要做任何事情以確保它每天都可以使用?

如果您希望間隔每天觸發一次,則需要將間隔設置為:1000 * 60 * 60 * 24。

您還需要注意設備重新啟動的情況。 如果用戶重新啟動設備,警報將被清除,您需要重新創建警報。 您將需要實現另一個偵聽RECEIVE_BOOT_COMPLETED的BroadcastReceiver,並在onReceive()中添加邏輯以重新創建警報。

另外,此行也是不必要的:

calendar.setTimeInMillis(System.currentTimeMillis());

這行:

Calendar calendar = Calendar.getInstance();

已經為您提供了一個設置為精確創建時間的Calendar對象。

您還應該添加以下幾行,以確保您的鬧鍾每天恰好在13:56觸發:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM