gpt4 book ai didi

android - 每天特定时间通知

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:03 28 4
gpt4 key购买 nike

我想实现这个:

首次打开应用程序后,如果满足特定条件,用户会在每天下午 2 点收到通知。如果条件为假,我们今天不会显示通知。下午 2 点检查条件,它从 Internet 下载一些数据。

到目前为止我使用了AlarmManager及其方法 setRepeating() 以 24 小时为间隔。 AlarmManager 启动 Service .在此服务中,我正在下载数据、检查条件以及是否为真 - 显示 Notification .由于下载可能会持续 5 秒以上,因此我已为该服务声明 android:process=":background",以在单独的进程中运行它而不阻塞我的 UI。

这种方法有两个缺点:


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

If the time occurs in the past, the alarm will be triggered immediately, with an alarm count depending on how far in the past the trigger time is relative to the repeat interval.

我希望用户不会在今天收到通知,只在第二天收到通知,依此类推。


2:我担心用户关机后我的通知不会显示。来自 AlarmManager文档:

Registered alarms are retained while the device is asleep (and can optionally wake the device up if they go off during that time), but will be cleared if it is turned off and rebooted.

我不知道是否可以让它一直工作。


如果您有任何改进的想法,欢迎您。

最佳答案

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 来启动并在那里再次启动你的闹钟。看看这个:Android BroadcastReceiver on startup - keep running when Activity is in Background

关于android - 每天特定时间通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125537/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com