如果当天的闹钟时间已过,android会阻止立即触发闹钟服务

标签 android alarmmanager android-alarms repeatingalarm

警报管理器的引用说明是这样的

If the stated trigger time is in the past, the alarm will be triggered immediately.

我在我的应用程序中遇到了这个问题。这是我的警报管理器代码:

Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class);
                pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);

                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);

                alarmManager.set(AlarmManager.RTC_WAKEUP,
                        calendar.getTimeInMillis(), pendingDinnerIntent);

这个问题有解决办法吗?

-----编辑------

我编写了一些代码来估计闹钟的设置时间是否在当前时间之前。这是上面的部分以及相应的更改:

Calendar calendar = Calendar.getInstance();
                long currentTime = calendar.getTimeInMillis();
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);
                long setTime = calendar.getTimeInMillis();
                Timestamp setTimestamp = new Timestamp(setTime);
                Timestamp currentTimestamp = new Timestamp(currentTime);
                if (setTimestamp.after(currentTimestamp))
                {
                    alarmManager.set(AlarmManager.RTC_WAKEUP,
                            calendar.getTimeInMillis(), pendingDinnerIntent);
                }
                else
                {
                }

如果 setTimestamp 早于 currentTimestamp,我的 alarmManager 应该做什么?

最佳答案

您不需要创建时间戳。您可以使用日历来完成此操作。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);

if(calendar.before(Calendar.getInstance())) {
    calendar.add(Calendar.DATE, 1);
}

alarmManager.set(AlarmManager.RTC_WAKEUP,
    calendar.getTimeInMillis(), pendingDinnerIntent);

我还要提到,从 KitKat 开始,如果您的 targetSdkVersion 为 19 或更高,则 AlarmManager#set() 方法不准确。如果您希望闹钟在准确的时间触发,则需要使用 setExact*() 方法。

关于如果当天的闹钟时间已过,android会阻止立即触发闹钟服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61167503/

相关文章:

android远程进程(接收者)快速死亡

android - 闹钟管理器在 Android 6.0 上无法在后台运行

java - 关闭应用程序后,Android AlarmManager 在某些设备上不起作用

android - 尝试在 Firebase 测试实验室中调用虚方法 android.arch.lifecycle.Lifecycle

java - android.app.RemoteServiceException : at android. app.ActivityThread$H.handleMessage 发送通知时

Android IntentService 未启动

android - Android 中的自定义提醒弹出 View

java - Android 服务需要在后台运行,直到应用程序被杀死

Android alarmmanager 不是很可靠

Android:我的警报管理器广播接收器不工作