我使用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);
其中pIntent是在警报触发时继续进行的未决意图。
事件触发几秒延迟。使用Calendar类执行此任务是否有任何问题。有什么建议吗?
TIA ..
答案 0 :(得分:10)
您有两个问题:
直接对服务使用_WAKEUP
警报是不可靠的。唯一可靠的模式包括WakefulBroadcastReceiver
,我的WakefulIntentService
或其他内容,其中PendingIntent
将是BroadcastReceiver
。
如果您的android:targetSdkVersion
为19或更高,并且您使用的是API级别19以上的设备,则set()
不准确。理想情况下,您允许它不精确,或者可能使用setWindow()
来控制它的关闭程度,以最大限度地降低警报事件的功率。如果绝对必须在精确时刻发生,则需要使用setExact()
。由于setWindow()
和setExact()
是API级别19的新用户,因此您需要通过检查set()
并相应地进行分支,在旧设备上回退到Build.VERSION.SDK_INT
。