Ada*_*zyk 7 service notifications android alarmmanager
我想实现这个目标:
首次打开应用程序后,如果某些条件成立,用户每天下午2点都会收到通知.如果条件为假,我们今天不会显示通知.条件在下午2点检查,它从Internet下载一些数据.
到目前为止,我使用了AlarmManager及其方法setRepeating(),间隔为24小时.AlarmManager启动服务.在这个服务中,我正在下载数据,检查条件以及是否属实 - 显示通知.由于下载可以持续超过5秒,我已声明android:process=":background"此服务,在单独的进程中运行它而不阻止我的UI.
这种方法有两个缺点:
1:如果用户打开应用程序,请在下午4点说(条件为真),他将立即收到通知.从setRepeating()文档:
如果过去发生时间,将立即触发警报,警报计数取决于过去触发时间相对于重复间隔的距离.
我希望该用户今天不会收到通知,只会在第二天收到通知,依此类推.
2:我担心用户关闭手机后我的通知不会显示.从AlarmManager文档:
设备处于休眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备.
我不知道是否有可能让它一直工作.
如果您有任何想法如何让它变得更好,欢迎您.
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);
Run Code Online (Sandbox Code Playgroud)
2:您可以注册BroadcastReceiver进行启动,然后再次启动警报.看看这个:启动时的Android BroadcastReceiver - 当Activity在Background中时继续运行
| 归档时间: |
|
| 查看次数: |
4093 次 |
| 最近记录: |