繁体   English   中英

警报管理器-SetRepeating-根本不触发INTERVAL_DAY

[英]Alarm Manager- SetRepeating - INTERVAL_DAY not firing at all

我正在尝试设置一个每天下午2点20分响的闹钟。 这是代码

Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY,14);
        calendar.set(Calendar.SECOND,20);

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        PendingIntent pendingIntent;
        Intent intentService = new Intent(context, DownloadService.class);

        //setting alarm to run at 2:20 pm
        pendingIntent= PendingIntent.getService(context,0,intentService,PendingIntent.FLAG_UPDATE_CURRENT);
           alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);

当我使用5*60*1000作为间隔的值时,它可以正常工作。 但是,当我使用AlarmManager.INTERVAL_DAY ,它不会关闭。 有人可以告诉我上面的代码是否正确吗? 谢谢。

我认为您只是在INTERVAL_DAY监督了说明:

在API 19之前的Android上运行时, setInexactRepeating (int,long,long,PendingIntent)可识别的可用不精确重复间隔。

在您的代码中,您使用setRepeating而不是setInexactRepeating AlarmManager.INTERVAL_DAY

这是intervalMillis参数的区别:

setRepeating

intervalMillis警报的后续重复之间的间隔(以毫秒为单位)。

setInexactRepeating

intervalMillis警报的后续重复之间的间隔(以毫秒为单位)。 在API 19之前,如果这是INTERVAL_FIFTEEN_MINUTES,INTERVAL_HALF_HOUR,INTERVAL_HOUR,INTERVAL_HALF_DAY或INTERVAL_DAY中的一种,则该警报将与其他警报保持相位一致,以减少唤醒次数。 否则,将像应用程序已调用setRepeating(int,long,long,PendingIntent)一样设置警报。 从API 19开始,所有重复警报将是不精确的,并且与其他警报一起分批处理,无论它们规定的重复间隔如何。

希望我有好运!

只需替换此行:

calendar.set(Calendar.SECOND,20);

用这一行:

calendar.set(Calendar.MINUTE,20);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM