Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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 报警管理器间隔\u天不工作_Android_Alarmmanager_Background Service - Fatal编程技术网

Android 报警管理器间隔\u天不工作

Android 报警管理器间隔\u天不工作,android,alarmmanager,background-service,Android,Alarmmanager,Background Service,我想每天早上8点左右运行一些代码。 我在MainActivity的onCreate中有此代码 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 8); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Intent intent = new Intent(this, PriceAmountService

我想每天早上8点左右运行一些代码。 我在MainActivity的onCreate中有此代码

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);

    Intent intent = new Intent(this, PriceAmountService.class);
    PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);
但这会在每次启动应用程序时运行作业。 我的代码是好的还是错的?此代码是否位于正确的位置(onCreate)?我做错了什么


My min API为14

此代码告诉AlarmManager,第一个警报应在该代码运行的当天上午8点发出。如果您在任何给定的一天上午8点之后运行此特定代码,那么第一次出现在上午8点之后的代码将成为过去,AlarmManager可能会选择立即运行此代码,因为它错过了第一次出现的代码,并将尝试对其进行弥补。如果您希望第二天的第一个闹钟是晚上8点,您必须在日历中添加一天来设置闹钟。

多亏了Doug Stevenson,我通过在我的方法中添加简单的If来解决这个问题。 我在上午8:00时提出一些工作的方法是:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);

    if (Calendar.getInstance().after(cal)) {
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }

    Intent intent = new Intent(this, PriceAmountService.class);
    PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);

谢谢重播。你有权利。但我不明白。我在MainActivity的onCreate方法中创建并设置报警。如果我给cal加上一天,警报今天就不会启动了。或者我错了。