簡體   English   中英

每天在特定時間設置重復警報

[英]Set Repeated alarm at specific time every day

我嘗試使用警報管理器在每天的特定時間運行警報。 我正在使用此代碼

Intent intent = new Intent(AlarmSettings.this, AlarmService.class);
                        intent.putExtra("i", i);
PendingIntent mAlarmSender = PendingIntent.getService(AlarmSettings.this, Id, intent, 0);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),Calendar.getInstance().getTimeInMillis()+(24*60*60*1000), mAlarmSender);}

問題是,如果cal.getTimeInMillis()值在過去警報立即運行,我不知道為什么,並且當cal.getTimeInMillis()值在將來它正在運行時。

我需要讓它在每天的特定時間運行。

// every day at 9 am
Calendar calendar = Calendar.getInstance();

// if it's after or equal 9 am schedule for next day
if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 9) {
    calendar.add(Calendar.DAY_OF_YEAR, 1); // add, not set!
}
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pi);

// alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
// AlarmManager.INTERVAL_DAY, pi);

它看起來像你的電話

setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)

嘗試設置正確的triggerAtTime(將來) - 就像

Calendar.getInstance().getTimeInMillis()+(24*60*60*1000)

第三個參數(間隔)顯然應該是你的間隔,就像

24*60*60*1000

這對我幫助很大,我有一個案例,我也在使用分鍾,並提出了以下小修正案:

/* Create calendar and set desired time before this*/

// Compare the current time milliseconds with the desired calendar time milliseconds
if (java.util.Calendar.getInstance().getTimeInMillis() >= 
            calendar.getTimeInMillis() ) {
    calendar.add(Calendar.DAY_OF_YEAR, 1);
}

暫無
暫無

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

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