警报服务未被触发

问题描述 投票:0回答:2

我想用小时和分钟在特定时间设置闹钟。

我试着这样做:

AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 11);
cal.set(Calendar.MINUTE, 30);

Intent intent = new Intent(this, AlarmService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarm (AlarmManager.RTC_WAKEUP, calAlarm.getTimeInMillis(), pendingIntent);

但是在特定的时刻和分钟不会发出警报。

我在stackoverflow和其他博客上看过很多例子,但这对我也没有用。

android alarmmanager android-alarms
2个回答
0
投票

从Android 6.0(API级别23)开始,Android引入了Doze功能,通过管理设备未连接到电源时应用程序的行为方式,延长了用户的电池寿命。

Doze特别可能影响AlarmManager警报和计时器管理的活动,因为当系统处于Doze时,Android 5.1(API级别22)或更低级别的警报不会触发。

为了帮助安排警报,Android 6.0(API级别23)引入了两个新的AlarmManager方法:setAndAllowWhileIdle()和setExactAndAllowWhileIdle()。使用这些方法,您可以设置即使设备处于打盹状态也会触发的警报。

注意:setAndAllowWhileIdle()和setExactAndAllowWhileIdle()都不能每个应用程序每9分钟触发一次警报。

AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(this, AlarmService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

if (Build.VERSION.SDK_INT >= 23) {
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);

} else if (Build.VERSION.SDK_INT >= 19) {
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);

} else {
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
}

更多信息:https://developer.android.com/training/monitoring-device-state/doze-standby.html


0
投票

您可以使用:

AlarmManagerCompat.setAlarmClock(alarmManager, time, triggerIntent, showIntent)

你可以找到文件here

© www.soinside.com 2019 - 2024. All rights reserved.