警报管理器仅触发 Android 中的最后一个计划任务

Alarm Manager triggering only the last scheduled task in Android

我正在使用警报管理器安排不同的作业在一天中的不同时间执行。当我只安排一项工作时,它按预期工作,但当我安排多项工作时,只有最后安排的工作得到执行。以下是我的代码。

  private void triggerAlarm(int hr, int min, String sid, String cid) {
    Intent intentToFire = new Intent(getApplicationContext(), AlarmBroadcastReceiver.class);
    intentToFire.putExtra("cid", cid);
    intentToFire.putExtra("sid", sid);

    intentToFire.setAction(ACTION_ALARM);


    PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),
            0, intentToFire, 0);
    AlarmManager alarmManager = (AlarmManager) getApplicationContext().
            getSystemService(Context.ALARM_SERVICE);

    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, hr);
    c.set(Calendar.MINUTE, min);
    c.set(Calendar.SECOND, 0);
    long afterTwoMinutes = c.getTimeInMillis();

    alarmManager.set(AlarmManager.RTC_WAKEUP, afterTwoMinutes, alarmIntent);
    //sendBroadcast(intentToFire);
}

您可以将 id 用于您的 AlarmReceiver 我也在使用它并希望它也适用于您

targetCal 中,参数只是传递您的日历对象,您可以在其中选择闹钟时间

像这样

private void setAlarm(Calendar targetCal) {

        Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
        final int _id = (int) System.currentTimeMillis();
        PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT);
       // PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
                appIntent);

    }

希望对你有用。