日常通知,在一定的时间(Everyday notifications at certain time

2019-06-27 09:28发布

我想实现这一点:

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

到目前为止我用AlarmManager及其方法setRepeating()用24小时的时间间隔。 AlarmManager触发了服务 。 在这种服务,我下载数据,检查条件,如果这是真的-显示通知 。 由于下载可以持续超过5秒钟,我已经声明android:process=":background"这个服务,在单独的进程中运行,并没有挡住我的UI。

这种方法有两个缺点:


1:如果用户打开应用程序,让我们说,下午4时(和条件为真),他会立即收到通知。 从setRepeating ()文档:

如果在过去发生的时间,报警器会立即根据触发时间是如何在过去远是相对于重复间隔触发,与报警计数。

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


2:我很担心,我会通知用户不能展后关闭手机。 从AlarmManager文档:

当设备处于睡眠状态(并且可以选择唤醒设备,如果他们在这段时间内熄灭),但如果它被关闭并重新启动后会被清除已注册的警报都将保留。

我不知道是否有可能使它工作的所有时间。


如果你有任何想法如何使它更好,欢迎您。

Answer 1:

1:我不是很肯定,如果我理解你的问题,但我认为你需要做的是,如果它已经是过去的14:00增加一天至14:00:

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,并开始你的闹钟再次出现。 看看这个: Android的广播接收器在启动时-继续运行时,活动在后台



文章来源: Everyday notifications at certain time