![](/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.