【问题标题】:Alarm Manager - Set alarm to run from a start date to a finish date警报管理器 - 将警报设置为从开始日期到结束日期运行
【发布时间】:2018-04-10 09:51:49
【问题描述】:

我目前正在开发一个带有提醒服务的安卓应用。我正在使用警报管理器。我已经成功地将警报设置为在用户单击按钮时运行。但我希望它从开始日运行到结束日。但现在,它似乎永远运行。

我已经有了这个:

private void setAlarm(String startDate,String endDate, String startTime, Context ctx, long id, int frequency){

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.YEAR, Utility.getYear(startDate));
calendar.set(Calendar.MONTH, Utility.getMonth(startDate));
calendar.set(Calendar.DAY_OF_MONTH, Utility.getDay(startDate));
calendar.set(Calendar.HOUR_OF_DAY, Utility.getHour(startTime));
calendar.set(Calendar.MINUTE, Utility.getMinute(startTime));

Intent intent = new Intent(ctx,AlarmReceiver.class);
intent.putExtra("ID", (int)id);
intent.setAction(""+System.currentTimeMillis());

PendingIntent mPendingIntent = PendingIntent.getBroadcast(ctx, (int) id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (AlarmManager.INTERVAL_DAY / frequency), mPendingIntent);
}

闹钟有效。我只需要将它设置为能够在达到 endDate 时停止。 谢谢。

【问题讨论】:

    标签: java android alarmmanager repeatingalarm


    【解决方案1】:

    您不能直接指定警报管理器的结束时间。您可以做的是手动取消广播接收器中的警报管理器。为了取消警报管理器,您需要确保待处理的意图与您用来设置警报的请求代码相同。使用AlarmManager 类的cancel 方法,将挂起的意图作为参数。

    【讨论】:

      【解决方案2】:

      您想在一个时间范围内设置重复警报。您可以将结束日期的时间戳存储在 SharedPreferences 中。每次 Pending Intent 启动时,您都需要检查它是否超过了结束日期限制。如果是,则调用取消方法alarmManager.cancel(pendingIntent)取消闹钟;

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        • 2015-02-27
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多