![](/img/trans.png)
[英]Android Custom-Time Notification Service/Broadcast/AlarmManager
[英]Android AlarmManager send Broadcast not on time
我使用AlarmManager按時設置兩個操作,
第一個動作設置為10:00:00,第二個動作設置為10:15:00。
我可以播兩個動作
並在10:00:03播出第一個動作(可以),
但請在晚10:29:15,14分鍾播出第二動作!
如何讓AlarmManager可以按時發送廣播?
設置AlarmManager代碼:
@Override
public void onCreate() {
setSchedule();
}
private void setSchedule(){
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar offCal = Calendar.getInstance();
offCal.set(Calendar.HOUR_OF_DAY, 10);
offCal.set(Calendar.MINUTE, 15);
offCal.set(Calendar.SECOND, 00);
Intent offIntent = new Intent(this, AlarmReceiver.class);
offIntent.setAction(AlarmReceiver.ALUM_SCREEN_OFF);
PendingIntent offPending = PendingIntent.getBroadcast(this, 1,
offIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC, offCal.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, offPending);
Intent onIntent = new Intent(this, AlarmReceiver.class);
onIntent.setAction(AlarmReceiver.ALUM_SCREEN_ON);
Calendar onCal = Calendar.getInstance();
onCal.set(Calendar.HOUR_OF_DAY, 10);
onCal.set(Calendar.MINUTE, 00);
onCal.set(Calendar.SECOND, 00);
PendingIntent onPending = PendingIntent.getBroadcast(this, 2,
onIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, onCal.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, onPending);
}
接收方代碼:
public class AlarmReceiver extends BroadcastReceiver {
public static final String ALUM_SCREEN_ON = "screenOn";
public static final String ALUM_SCREEN_OFF = "screenOff";
private static final String TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d(TAG, "get braodcast action:"+intent.getAction());
}
嗨,您使用的是setRepeating方法,它不會在准確的時間發出警報.Alarm Manager會強烈勸阻除系統應用之外的其他應用准確觸發警報,以實現更好的電池優化。因此,如果您想在特定時間觸發警報,則可以使用setExact()方法這也不會給您完整的保證,但是它將為您提供最准確的保證。雖然一次設置多個警報,請確保在`
PendingIntent onPending = PendingIntent.getBroadcast(this, 2,
onIntent, PendingIntent.FLAG_UPDATE_CURRENT);
在這里您給了2作為ID,不同的警報應該不同。
由於使用KitKat,set和setRepeating API並不精確。 如果您絕對需要警報在特定時間運行,請使用setExact。 如果警報時間不是很緊急,請考慮使用setWindow代替。
沒有setExactRepeating,因此如果需要,則需要使用setExact,它們可以重新布防警報。 但是,除非您做的是時間緊迫的工作,否則不建議這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.