警报管理器在android中没有在准确的时间触发警报

Aud*_*hil 4 android calendar alarmmanager android-alarms android-pendingintent

我使用Calendar类安排闹钟,如下所示

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,1);
cal.getTimeInMillis();  
cal.set(Calendar.MINUTE,05);
long TriggerMillis = cal.getTimeInMillis();

AlarmManager aManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);      
aManager.set(AlarmManager.RTC_WAKEUP, TriggerMillis,pIntent);
Run Code Online (Sandbox Code Playgroud)

其中pIntent是在警报触发时进一步继续的待处理意图.

事件触发几秒延迟.使用Calendar类执行此任务是否有任何问题.有什么建议?

TIA ..

Com*_*are 11

你有两个问题:

  1. _WAKEUP直接使用报警是不可靠的.唯一可靠的模式涉及WakefulBroadcastReceiver,我WakefulIntentService或者沿着这些线的东西,其中PendingIntent将是a BroadcastReceiver.

  2. 如果您android:targetSdkVersion是19或更高,并且您使用的是API Level 19以上的设备,set()则不准确.理想情况下,您可以使其不准确,或者可能用于setWindow()控制它的关闭程度,以最大限度地降低警报事件的功率.如果绝对必须在精确的时刻发生,则需要使用setExact().由于setWindow()setExact()是新的API等级19,你需要将回落到set()旧设备上,通过检查Build.VERSION.SDK_INT和相应的分支.

  • @Manmohan:不是。最接近的方法是使用setExact()并自己“重复”(作为对较早的setExact()处理工作的一部分,再次调用setExact())。但是,在Android 6.0+上,即使使用`setExactAndAllowWhileIdle()`,也不是很精确。 (2认同)