Android的AlarmManager確實支持精確時間觸發(fā),但在Android 5.1(API級別22)及更高版本中,對于精確警報有一些限制
以下是如何使用AlarmManager設(shè)置精確觸發(fā)時間的示例:
private void setExactAlarm(Context context, long triggerTime) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, YourBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
}
}
請注意,為了兼容不同的Android版本,我們需要根據(jù)API級別選擇適當(dāng)?shù)姆椒?。在Android 4.4(API級別19)及更高版本中,可以使用setExact()
方法設(shè)置精確觸發(fā)時間。在較舊的版本中,可以使用set()
方法,但可能無法保證精確觸發(fā)。
此外,從Android 6.0(API級別23)開始,應(yīng)用程序在Doze模式下可能會受到限制。在這種情況下,可以使用setAndAllowWhileIdle()
或setExactAndAllowWhileIdle()
方法來設(shè)置精確觸發(fā)時間。但是,請注意,這些方法可能會影響電池壽命和性能。