Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何防止警报在启动时运行经过的时间_Android_Alarmmanager - Fatal编程技术网

Android 如何防止警报在启动时运行经过的时间

Android 如何防止警报在启动时运行经过的时间,android,alarmmanager,Android,Alarmmanager,我有一个带有RTC警报的应用程序。目前,我将闹钟设置为每天早上8点点火。我的问题是,当警报开始时(下午4点),它将考虑开始时间(8AM)已经过去,因此将运行。 我希望闹钟只在早上8点左右响,但是如果它在一天的晚些时候启动,就不会响。你知道怎么做吗?你正在使用setInexactRepeating或setRepeating,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是-(当天上午8点)。您使用的

我有一个带有RTC警报的应用程序。目前,我将闹钟设置为每天早上8点点火。我的问题是,当警报开始时(下午4点),它将考虑开始时间(8AM)已经过去,因此将运行。
我希望闹钟只在早上8点左右响,但是如果它在一天的晚些时候启动,就不会响。你知道怎么做吗?

你正在使用
setInexactRepeating
setRepeating
,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是-(当天上午8点)。

您使用的是
setInexactRepeating
setRepeating
,对吗?因此,要处理这种情况,只需比较2次:当前时间(毫秒)和(上午8点,当天)毫秒。如果第一次超过第二次,则应在(第二天上午8点)触发警报,如果不是(当天上午8点)。

我建议您使用to
calendar.add(calendar.day\u OF年,1)

研究以下代码:

Calendar calendar = Calendar.getInstance();
// 9 AM 
calendar.add(Calendar.DAY_OF_YEAR, 1);   ///to avoid firing the alarm immediately
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0,
            new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                                AlarmManager.INTERVAL_DAY, pi);

我建议您使用to
calendar.add(calendar.DAY/u OF/u YEAR,1)

研究以下代码:

Calendar calendar = Calendar.getInstance();
// 9 AM 
calendar.add(Calendar.DAY_OF_YEAR, 1);   ///to avoid firing the alarm immediately
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0,
            new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                                AlarmManager.INTERVAL_DAY, pi);

在我的例子中,如果时间还没有过去,我想在当天发出警报,所以我需要稍微改进Lucifer的回答

void setTheAlarm(int hour, int minute)
{
    SettingsData.TriggerTime triggerTime = common.settingsData.getDeviceParamInfo().getConnectionTime();

    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);


    if(System.currentTimeMillis() > calendar.getTimeInMillis())
    {
        calendar.add(Calendar.DAY_OF_YEAR, 1);   ///to avoid firing the alarm immediately
    }

    // With setInexactRepeating(), you have to use one of the AlarmManager interval
    // constants--in this case, AlarmManager.INTERVAL_DAY.
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, alarmIntent);

    Log.i("setTheAlarm", String.format("Alarm is set to %02d:%02d", hour, minute));
}

在我的例子中,如果时间还没有过去,我希望警报在当天发出,所以我需要稍微改进Lucifer的回答

void setTheAlarm(int hour, int minute)
{
    SettingsData.TriggerTime triggerTime = common.settingsData.getDeviceParamInfo().getConnectionTime();

    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    calendar.set(Calendar.SECOND, 0);


    if(System.currentTimeMillis() > calendar.getTimeInMillis())
    {
        calendar.add(Calendar.DAY_OF_YEAR, 1);   ///to avoid firing the alarm immediately
    }

    // With setInexactRepeating(), you have to use one of the AlarmManager interval
    // constants--in this case, AlarmManager.INTERVAL_DAY.
    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, alarmIntent);

    Log.i("setTheAlarm", String.format("Alarm is set to %02d:%02d", hour, minute));
}

好主意,但是你确定吗,如果你写的代码在晚上11:00运行,它仍然会被称为明天早上9:00?只是增加1天给我的印象是,这将是一个完整的延迟1天day@MahmoudBadri是的,我100%确定,我已经用那行代码测试了这段代码。好的,我接受这个答案,因为它更简单,虽然nikis的答案更准确,但在我的情况下,我想要一个更简单更聪明的想法,但是你确定,如果你编写的代码在晚上11:00运行,明天早上9:00还叫吗?只是增加1天给我的印象是,这将是一个完整的延迟1天day@MahmoudBadri是的,我100%确定,我已经用那行代码测试了这段代码。好的,我接受这个答案,因为它更简单,虽然nikis的答案更准确,但在我的情况下,我希望更简单