启动报警管理器的时间不正确

Icorrect time of starting Alarm Manager

我对警报管理器有疑问。我正在尝试设置在特定时间开始闹钟,但闹钟会在设置时间后 2 秒内开始。 这是我设置闹钟的代码:

//setting alarm by clicking "add alarm"
        addAlarm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //initializing alert dialog with time picker
                final AlertDialog.Builder alert = new AlertDialog.Builder(Events.this);
                final TimePicker timer = new TimePicker(Events.this);
                alert.setMessage(R.string.choose_time);
                alert.setTitle(R.string.set_alarm);
                alert.setView(timer);
                alert.setPositiveButton("Apply", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //getting set time
                        int hour = timer.getHour();
                        int minute = timer.getMinute();
                        //getting alarm service
                        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                        //creating intent for switching to AlarmReceiver.class
                        Intent intent = new Intent(Events.this, AlarmReceiver.class);
                        SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
                        //getting full date with hours and minutes
                        String alarmTime = selectedDate + " " + hour + ":" + minute;
                        //parsing date
                        try {
                            alarmDate = formatter.parse(alarmTime);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                        //creating pending intent
                        PendingIntent pendingIntent = PendingIntent.getBroadcast(Events.this,
                                8452, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                        //setting alarm
                        alarmManager.set(RTC_WAKEUP,alarmDate.getTime(), pendingIntent);
                        //info about time set
                        Snackbar.make(bottomRL, "Alarm set in " + hour + ":" + minute,
                                Snackbar.LENGTH_LONG).show();
                    }
                });
                alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                });
                alert.show();
            }
        });

这是我的接收器:

public class AlarmReceiver extends BroadcastReceiver {
    public AlarmReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, R.string.alarm_message, Toast.LENGTH_LONG).show();
            Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(2000);
    }
}

有人可以帮我解决问题吗?

那是因为自 API 19 起警报传递不准确,请参阅 here. The OS will shift the alarms to fire multiple at the same time in order to save battery. If you really want to set your alarm exact to the second, you could use alarmManager.setExact()