首页 > 解决方案 > 在特定时间调用 AlarmManager

问题描述

我想每天早上 6 点开始闹钟。我写了下面的代码,但我在调用服务后立即发出警报,而不是保留并设置为早上 6 点。我的问题是什么?我在广播接收器中调用此方法并每秒重复调用一次!如果我将我的代码更改为以下代码,我的闹钟会按时正常工作。

        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, new Date().getTime()+2*60*1000, monitoringSchedulePI);
private void setSingleExactMonitoringSchedule() {
    final AlarmManager alarmManager = (AlarmManager) KITILApplication.getappContext().getSystemService(Context.ALARM_SERVICE);
    Date date = new Date();
    Log.e("MonitoringScheduleDate:", "Broadcast:" + date.toString());
    Intent monitoringScheduleIntent = new Intent(KITILApplication.getappContext(), AlarmManagerBroadcastReciever.class);
    monitoringScheduleIntent.putExtra(AppConstant.REQUEST_CODE_RECEIVER, AppConstant.REPEAT_GET_SCHEDULE);
    PendingIntent monitoringSchedulePI = PendingIntent.getBroadcast(KITILApplication.getappContext(), OfflineData.getUniqueIdMonitoringSchedule(KITILApplication.getappContext()), monitoringScheduleIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Calendar calendar=Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY,6);
    calendar.set(Calendar.MINUTE,0);
    long trigger=calendar.getTimeInMillis();
    if (Build.VERSION.SDK_INT >= 23) {
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, trigger, monitoringSchedulePI);
    } else if (Build.VERSION.SDK_INT >= 19) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP,trigger, monitoringSchedulePI);
    }else{
        alarmManager.set(AlarmManager.RTC_WAKEUP, trigger, monitoringSchedulePI);
    }
}

标签: androiddatebroadcastreceiveralarmmanager

解决方案


使用下面的代码。它会起作用的。

 private void setSingleExactMonitoringSchedule() {
        final AlarmManager alarmManager = (AlarmManager) KITILApplication.getappContext().getSystemService(Context.ALARM_SERVICE);
        Date date = new Date();
        Log.e("MonitoringScheduleDate:", "Broadcast:" + date.toString());
        Intent monitoringScheduleIntent = new Intent(KITILApplication.getappContext(), AlarmManagerBroadcastReciever.class);
        monitoringScheduleIntent.putExtra(AppConstant.REQUEST_CODE_RECEIVER, AppConstant.REPEAT_GET_SCHEDULE);
        PendingIntent monitoringSchedulePI = PendingIntent.getBroadcast(KITILApplication.getappContext(), OfflineData.getUniqueIdMonitoringSchedule(KITILApplication.getappContext()), monitoringScheduleIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Calendar calendar=Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY,6);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND, 0);
        calendar.add(Calendar.DATE, 1);/*call from next day*/
        long trigger=calendar.getTimeInMillis();
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()
                , AlarmManager.INTERVAL_DAY, monitoringSchedulePI);
    }

推荐阅读