Android 广播接收器中的重复警报
Android repeating alarm in Broadcast Receiver
我的闹钟启动通知服务。 A 想让我的闹钟在每个月的第 7 天在 14:00
响起
我的收件人:
public class AlarmReceiver extends BroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("RECEIVER STARTED");
if (checkForDay()) {
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(context, AlarmService.class);
alarmIntent = PendingIntent.getService(context, 0, intent1, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
System.out.println("ALARM SET");
} else
System.out.println("ALARM NOT SET");
}
private boolean checkForDay() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return calendar.get(Calendar.DATE) == 7;
}
我的接收器从 BOOT_COMPLETE 开始并从 MainActivity onCreate() 中的广播开始;
但是有问题。
- 如果用户保持 phone 24/7 启动会怎样
- 用户可以在 14:00 之后启动我的应用程序并且警报会立即触发 - 不想这样。仅在 14:00
- 用户可能会忘记启动我的应用程序,闹钟根本不会触发
如果 setInexactRepeating() 不好,因为间隔,如何实现正确的每月重复警报。不是每个月都一样吗?
情况 1:[如果用户保持 phone 24/7 启动会怎样]
在这种情况下,一切顺利。当第 7 天的闹钟在 14:00 触发时,您可以设置下一个第 7 天的闹钟
情况 2:[用户可以在 14:00 之后启动我的应用程序,并且警报会立即触发 - 不想要它。仅在 14:00]
在这种情况下,只需添加一个检查来处理或不处理您需要在每个月的第 7 天 14:00
执行的逻辑
案例 3:[用户可能忘记启动我的应用程序,闹钟根本不会触发]
你可以使用重启事件,它有效。
我的闹钟启动通知服务。 A 想让我的闹钟在每个月的第 7 天在 14:00
响起我的收件人:
public class AlarmReceiver extends BroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("RECEIVER STARTED");
if (checkForDay()) {
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(context, AlarmService.class);
alarmIntent = PendingIntent.getService(context, 0, intent1, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
System.out.println("ALARM SET");
} else
System.out.println("ALARM NOT SET");
}
private boolean checkForDay() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return calendar.get(Calendar.DATE) == 7;
}
我的接收器从 BOOT_COMPLETE 开始并从 MainActivity onCreate() 中的广播开始; 但是有问题。
- 如果用户保持 phone 24/7 启动会怎样
- 用户可以在 14:00 之后启动我的应用程序并且警报会立即触发 - 不想这样。仅在 14:00
- 用户可能会忘记启动我的应用程序,闹钟根本不会触发
如果 setInexactRepeating() 不好,因为间隔,如何实现正确的每月重复警报。不是每个月都一样吗?
情况 1:[如果用户保持 phone 24/7 启动会怎样]
在这种情况下,一切顺利。当第 7 天的闹钟在 14:00 触发时,您可以设置下一个第 7 天的闹钟
情况 2:[用户可以在 14:00 之后启动我的应用程序,并且警报会立即触发 - 不想要它。仅在 14:00]
在这种情况下,只需添加一个检查来处理或不处理您需要在每个月的第 7 天 14:00
执行的逻辑案例 3:[用户可能忘记启动我的应用程序,闹钟根本不会触发]
你可以使用重启事件,它有效。