【发布时间】:2018-05-03 09:20:56
【问题描述】:
以下代码非常适合Activity:
Intent intent = new Intent(context, MyActivity.class);
PendingIntent operation = PendingIntent.getActivity(context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
alarmmanager.setExact(AlarmManager.RTC_WAKEUP,
startTime.getTimeInMillis(),
operation);
但是,当我为IntentService 做同样的事情时,它只有在startTime 和我设置闹钟的时间在同一天时才有效。例如如果我今天将闹钟设置为下午 5 点,它将被执行,但是当我今天将闹钟设置为明天下午 5 点时,它将不会执行。如果这是Activity,那么它适用于两种情况。
Intent intent = new Intent(context, MyService.class);
PendingIntent operation = PendingIntent.getService(context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT);
alarmmanager.setExact(AlarmManager.RTC_WAKEUP,
startTime.getTimeInMillis(),
operation);
如何解决这个问题?
我想要实现的目标是每天在准确的时间执行IntentService。
【问题讨论】:
-
你的目标SDK是什么?你在什么设备上测试?当闹钟应该响起时设备是否已唤醒?
-
TargetSDK 为 27。在 API 27 官方模拟器上测试。是的,设备处于唤醒状态。
-
您可以尝试将目标 SDK 设置为 25 并查看其行为是否有所不同吗?
-
您也可以尝试使用
setExactAndAllowWhileIdle()而不是setExact()来查看这是否会改变 SDK 27 上的行为。
标签: android alarmmanager android-pendingintent intentservice android-alarms