java - 如何为选定的日期设置具有相同 ID 的警报?
问题描述
我有两个变量:
- howManyDays - 闹钟应该工作多少天
- cal - 开始日期
不幸的是我的代码不起作用 - 警报没有显示。你能告诉我我做错了什么吗?我可以为多个警报设置相同的ID以快速删除它吗?如果您有任何问题,请告诉我。
int howManyDays= Integer.parseInt(countDays.getText().toString());
Cursor c = myDb.getID_REMINDER();
c.moveToFirst();
int id = Integer.parseInt(c.getString(0));
Intent intx = new Intent(getApplicationContext(), NotificationReceiver.class);
intx.putExtra("Value", nameOfMedicine.getText().toString());
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intx, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
for(int i=0; i<=howManyDays; i++) {
Calendar cc = cal;
cc.add(cc.DATE, i);
alarmManager.set(AlarmManager.RTC_WAKEUP, cc.getTimeInMillis(), pendingIntent);
}
解决方案
无需设置多个闹钟,您只需设置一个重复闹钟即可。为此,您必须提供以毫秒为单位的重复间隔,如下所示
Intent intx = new Intent(getApplicationContext(), NotificationReceiver.class);
intx.putExtra("Value", nameOfMedicine.getText().toString());
intent.putExtra("requestCode", id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), id, intx, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
long repeatingInterval = 24 * 60 * 60 * 1000; // 1 day
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
repeatingInterval, pendingIntent);
请记住,在 Android 中无法为 howManyDays 设置闹钟。一种可能且低处理的解决方案是设置两个警报;一个是重复闹钟,第二个是最后一天的固定闹钟。当在 howManyDays 之后触发第二个警报时,它将取消第一个重复警报。
推荐阅读
- javascript - 如何在不刷新页面的情况下使用 Vue 切换按钮
- sql-server - 编写用于过滤 SQL Server 表属性的 VB.Net 代码
- javascript - 访问 module.exports 中的父函数
- python - 是否有更好/更有效的方法来为 Pandas 中的特定列生成多条件过滤器?
- c++ - POST 请求使用 wstring 类型截断并使用字符串格式良好
- mongoose - mongoose querying with JSON, not the javascript object?
- python - groupby 在熊猫的两列中计算相同的值?
- string - 如何停止输出不包含句点的字符串?
- apache-spark - 如何使用带有 Spark 2.4.4 的 delta 创建表?
- python - 更新更改字符串:如何为 python 编写正则表达式,以便提取一个术语及其定义?