在一个范围内设置重复警报并重新启动警报而不受用户干扰

问题描述 投票:0回答:1

我正在创建一个饮用水提醒应用程序(我已经搜索并尝试过,但我没有看到解决方案),这个想法是让用户输入开始时间,间隔和结束时间。几乎一切都运行正常,但是当达到结束时间时,第二天没有设置闹钟,并且每分钟左右开始响起。

基本上我想要实现的是,如果警报的结束时间到达,则将在没有用户干预的情况下建立第二天。

我已经尝试过使用Calendar.before ()Calendar.after ()的方法,但我没有看到结果。

Calendar now = Calendar.getInstance();

// cancel already scheduled reminders
cancelWaterReminder(context);

Calendar calendarEndTime = Calendar.getInstance();
calendarEndTime.set(Calendar.HOUR, userPrefs.getWaterReminder_toHour());
calendarEndTime.set(Calendar.MINUTE, userPrefs.getWaterReminder_toMin());
calendarEndTime.set(Calendar.SECOND, 0);

Calendar calendarStartTime = Calendar.getInstance();
calendarStartTime.set(Calendar.HOUR_OF_DAY, hour);
calendarStartTime.set(Calendar.MINUTE, min);
calendarStartTime.set(Calendar.SECOND, 0);

// Enable a Broadcast receiver
ComponentName receiver = new ComponentName(context, WaterAlarmReceiver.class);
PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Intent intent1 = new Intent(context, WaterAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_WATER_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);

//Here is where i try to set and reset alarms 
//according to the current hour, start hour and end hour.

if (now.after(calendarEndTime)) 
{
    //calendarStartTime.add(Calendar.DAY_OF_MONTH, 1);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);
}
else if (calendarStartTime.before(calendarEndTime)) 
{
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);
    setWaterReminderEndTime(context, userPrefs.getWaterReminder_toHour(), userPrefs.getWaterReminder_toMin());
}
java android calendar broadcastreceiver alarmmanager
1个回答
0
投票

我的猜测问题是在下面的行:

am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * interval, pendingIntent);

可能你将interval设置为1并且你没有添加日期乘数(24)来安排第二天,这就是为什么警报每分钟都会消失。

如果上面是问题,那么改变应该解决它,

am.setRepeating(AlarmManager.RTC_WAKEUP, calendarStartTime.getTimeInMillis(), 1000 * 60 * 24 * interval, pendingIntent);
© www.soinside.com 2019 - 2024. All rights reserved.