我需要安排某个重复警报,该警报可能在一周的任何一天,几天内发生。它可以是星期一,也可以是每个工作日,也可以只有周末。当然,这需要存储在数据库中。
我的问题是,如何将其存储在数据库中?我考虑使用一个由七个位置组成的int数组,并根据哪个位置是正确的(或1)来判断是否有这种警报。
还有其他想法吗?有什么建议吗?
在此先多谢。
您可以存储一个byte
代表您的星期的单身,并使用按位&
操作从中取出值。位1可以代表星期一,位2可以代表星期二,等等。您可以使用它来代表日期的所有组合,例如:
01100000 - Saturday/Sunday (Weekend)
01110001 - Friday/Saturday/Sunday/Monday (Long weekend)
读取值时,您将使用类似以下内容的方法:
byte val = 0x71; //01110001
boolean mondayActive = (val & 0x1) == 1;
boolean fridayActive = (val >> 4& 0x1) == 1;
编辑注释
这假定您已经熟悉AlarmManager,并且正在寻找一种跟踪警报的机制,因为您不能使用OP所描述的方式来使用单个警报来计划事件。如果您需要在单个任务中模仿cron,可以看看BuzzBox SDK之类的东西。
编辑写样本
public static final int MONDAY = 0x01; //00000001
public static final int TUESDAY = 0x02; //00000010
public static final int WEDNESDAY = 0x04; //00000100
public static final int THURSDAY = 0x08; //00001000
public static final int FRIDAY = 0x10; //00010000
public static final int SATURDAY = 0x20; //00100000
public static final int SUNDAY = 0x40; //01000000
//example values to write
int weekend = SATURDAY | SUNDAY; //01100000
int longWeekend = FRIDAY | SATURDAY | SUNDAY | MONDAY; //01110001
//and as per flightplanner's comment, to read
boolean mondayActive = (weekend & MONDAY) == MONDAY; //false
mondayActive = (longWeekend & MONDAY) == MONDAY; //true
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句