使用 AlarmManager 的所有 prevoius 时间警报响起

Alarm is ringing for all prevoius times using AlarmManager

我正在使用警报管理器设置警报并通过从 SQlite 中选取值来设置此警报 Database.The 警报对于未来的警报工作正常,但问题是当我打开 Activity 其中的警报功能被调用时,闹钟开始响起所有以前的时间。我应该如何解决这个问题? 这是我的闹钟功能

     void Alaramset()
{
    Cursor cursor=mydb.getAllData();



     if (cursor.moveToFirst())
     {
         do{
             String alarm1 = cursor.getString     (cursor.getColumnIndex(DBHelper.ALARM_COLUMN_REMINDER1));
             int id = Integer.parseInt(cursor.getString(cursor.getColumnIndex(DBHelper.ALARM_COLUMN_ID)));
                int minute=Integer.parseInt       (alarm1.substring(3, 5));
                int hr=Integer.parseInt(alarm1.substring(0, 2));
    Intent myIntent =  new Intent(getActivity(), MyAlaramService.class);
    myIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    PendingIntent pendingIntent = PendingIntent.getService(getActivity(), id, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager =  (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
         //       Toast.makeText(getActivity(), ""+minute+" : "+hr, 300).show();
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
     calendar.set(Calendar.HOUR_OF_DAY, hr);
       calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, 0);
       alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
         }
         while (cursor.moveToNext());
     }
}

您似乎正在安排过去发生的闹钟。 过去安排的任何警报都会立即触发。 一个简单的解决方案是将过去的警报安排在第二天。

Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
if (calendar.before(now) {
   // alarm has already happened. schedule it for tomorrow
   calendar.add(Calendar.Date, 1);
} 
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),    pendingIntent);