【发布时间】:2018-04-10 07:56:59
【问题描述】:
我想在特定时间运行服务,为此我正在使用 AlarmManager。我的代码如下。
public static void setServiceAlarm(Context context, boolean isOn) {
Intent i = new Intent(context, RefreshingMedicationDataService.class);
PendingIntent pi = PendingIntent.getService(
context, 0, i, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 51);
AlarmManager alarmManager = (AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
if (isOn) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pi);
} else {
alarmManager.cancel(pi);
pi.cancel();
}
}
问题是,AlarmManager 没有调用我在 PendingIntent 中提供的服务。 但是,当我尝试像下面这样调用 AlarmManager 时,它正在工作! 为什么?
public static void setServiceAlarm(Context context, boolean isOn) {
Intent i = new Intent(context, RefreshingMedicationDataService.class);
PendingIntent pi = PendingIntent.getService(
context, 0, i, 0);
AlarmManager alarmManager = (AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
if (isOn) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), pi);
} else {
alarmManager.cancel(pi);
pi.cancel();
}
}
我尝试了几乎所有的 AlarmManager 方法(如 setExact()、set()、setRepeating()、setAlarmClock()),仅当我通过System.currentTimeMillis()时仍然有效@
【问题讨论】:
-
请在您的清单中发布
<service>声明。 -
当您使用
currentTimeMillis()时,会立即触发警报。如果您在以后安排闹钟,Android 可能由于某种原因无法启动您的Service。你确定Service没有开始吗?您是否向Service构造函数或onCreate()添加了一些日志记录?你有自定义的Application类吗?
标签: android alarmmanager android-pendingintent