java - 设置重复警报
问题描述
我有一个提醒应用程序,它应该在设置时每周一天的特定时间在特定日期通知用户。
变量“frequency_value”包含警报应该在一周中的哪几天响起的数据。它是由 1 和 2 组成的字符串,其中 2 表示警报应该在一周中的那一天响起,按星期一到星期日的顺序排列。
所以 1111112 表示闹钟仅在周日响起,1212111 表示仅在周二和周四响起。
但它不能正常工作。任何人都可以帮忙吗?
public void next_alarm(Context context)
{
Integer day_sequence[] = new Integer[7];
Calendar now = Calendar.getInstance();
Calendar alarm_time = Calendar.getInstance();
String d[] = time.split(":");
alarm_time.set(Calendar.HOUR_OF_DAY, Integer.parseInt(d[0]));
alarm_time.set(Calendar.MINUTE, Integer.parseInt(d[1]));
alarm_time.set(Calendar.SECOND, 0);
switch(now.get(Calendar.DAY_OF_WEEK))
{
case Calendar.SUNDAY:
day_sequence = new Integer[]{1, 2, 3, 4, 5, 6, 7};
break;
case Calendar.MONDAY:
day_sequence = new Integer[]{2, 3, 4, 5, 6, 7, 1};
break;
case Calendar.TUESDAY:
day_sequence = new Integer[]{3, 4, 5, 6, 7, 1, 2};
break;
case Calendar.WEDNESDAY:
day_sequence = new Integer[]{4, 5, 6, 7, 1, 2, 3};
break;
case Calendar.THURSDAY:
day_sequence = new Integer[]{5, 6, 7, 1, 2, 3, 4};
break;
case Calendar.FRIDAY:
day_sequence = new Integer[]{6, 7, 1, 2, 3, 4, 5};
break;
case Calendar.SATURDAY:
day_sequence = new Integer[]{7, 1, 2, 3, 4, 5, 6};
break;
}
for(int i=0;i<7;i++) {
if(String.valueOf(frequency_value).charAt(day_sequence[i]) == '2')
{
Intent myIntent1 = new Intent(context, Task_Notification_BroadcastReceiver.class);
myIntent1.putExtra("frequency_value", frequency_value);
myIntent1.putExtra("task_time", time);
myIntent1.putExtra("task_full_text", full_text);
myIntent1.putExtra("task_text", text);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, Integer.parseInt(time.replace(":", "0")), myIntent1,
PendingIntent.FLAG_UPDATE_CURRENT);
alarm_time.add(Calendar.DAY_OF_YEAR, i+1);
AlarmManager alarmManager1 = (AlarmManager) context.getSystemService(ALARM_SERVICE);
assert alarmManager1 != null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager1.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarm_time.getTimeInMillis(), pendingIntent1);
table_alarms_db.addAlarm(new Database_Alarms(null, alarm_time.getTimeInMillis(), time, text, full_text, frequency_value));
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager1.setExact(AlarmManager.RTC_WAKEUP, alarm_time.getTimeInMillis(), pendingIntent1);
table_alarms_db.addAlarm(new Database_Alarms(null, alarm_time.getTimeInMillis(), time, text, full_text, frequency_value));
}
else {
alarmManager1.set(AlarmManager.RTC_WAKEUP, alarm_time.getTimeInMillis(), pendingIntent1);
table_alarms_db.addAlarm(new Database_Alarms(null, alarm_time.getTimeInMillis(), time, text, full_text, frequency_value));
}
break;
}
}
}
解决方案
推荐阅读
- git - 如果文件大小超过给定大小,则禁止 GitHub 推送
- javascript - 重复结果以从数组中提取数据
- python - 安装纱线时出错:没有名为“yarnlib”的模块
- python - 在 Pandas 数据框中将单元格向上移动
- mysql - 在使用 UNION 子句连接它们之前,如何以不同的方式对 2 个表进行排序?
- facebook-graph-api - 如何从 Facebook 营销 API 上的 adaccount 获取轮播广告发布数据?
- firebase - Flutter:无法访问 Firebase 云功能模拟器,找不到具有指定主机名的服务器
- odata - 将空值传递给 OData V2 Edm.Time 属性
- reactjs - 再次调用 useEffect 时如何忽略以前的异步效果?
- swift - 屏幕中的位置和滚动视图