Android 每天特定时间的通知

Android 每天特定时间的通知,android,service,notifications,alarmmanager,Android,Service,Notifications,Alarmmanager,我希望做到这一点: 在第一次打开应用程序后,如果某个条件为真,用户每天下午2点会收到通知。如果条件为假,我们今天不显示通知。在下午2点检查情况,它从互联网下载一些数据 到目前为止,我使用了它的方法setRepeating(),时间间隔为24小时。AlarmManager启动一个报警按钮。在这个服务中,我下载数据,检查条件,如果它是真的-显示。由于下载可能持续5秒钟以上,因此我已为该服务声明了android:process=“:background”,以在单独的进程中运行它,而不阻塞我的UI 这种

我希望做到这一点:

在第一次打开应用程序后,如果某个条件为真,用户每天下午2点会收到通知。如果条件为假,我们今天不显示通知。在下午2点检查情况,它从互联网下载一些数据

到目前为止,我使用了它的方法setRepeating(),时间间隔为24小时。AlarmManager启动一个报警按钮。在这个服务中,我下载数据,检查条件,如果它是真的-显示。由于下载可能持续5秒钟以上,因此我已为该服务声明了
android:process=“:background”
,以在单独的进程中运行它,而不阻塞我的UI

这种方法有两个缺点:


1:如果用户在下午4点打开应用程序(假设条件为真),他将立即收到通知。从()文档:

如果时间发生在过去,则会触发报警 立即,报警计数取决于过去的报警距离 触发时间与重复间隔有关

我想,该用户将不会收到通知,这一天,只有第二天等


2:我担心用户关机后我的通知不会显示出来。从文件:

当设备处于睡眠状态时,注册的报警会被保留(如果在此期间报警关闭,可以选择唤醒设备),但如果关闭并重新启动,则会被清除

我不知道是否有可能让它一直工作



如果你有什么好主意,欢迎你。

1:我不太确定我是否理解你的问题,但我想你所要做的就是,如果已经过了下午2点,就在下午2点之前再加上一天:

GregorianCalendar twopm = new GregorianCalendar();
twopm.set(GregorianCalendar.HOUR_OF_DAY, 14);
twopm.set(GregorianCalendar.MINUTE, 0);
twopm.set(GregorianCalendar.SECOND, 0);
twopm.set(GregorianCalendar.MILLISECOND, 0);
if(twopm.before(new GregorianCalendar())){
    twopm.add(GregorianCalendar.DAY_OF_MONTH, 1);
}
alarmManager.setRepeating(type, twopm.getTimeInMillis(), 1000*60*60*24, intent);

2:您可以注册一个BroadcastReceiver进行引导,然后在那里再次启动闹钟。看看这个:

非常感谢!我有一个问题,你确定:twopm.set(gregorianalendar.HOUR,2)设置的是PM小时,而不是AM小时吗?也许我应该使用twoPm.set(Gregorianalendar.HOUR\u OF_DAY,14)?