使用AlarmManager,警报响铃所有prevoius时间

时间:2016-04-05 17:36:06

标签: android sqlite alarmmanager android-pendingintent android-alarms

我正在使用警报管理器设置警报并通过从SQlite数据库中选择值来设置此警报。警报对于将来的警报工作正常但问题是当我打开调用警报功能的活动时,警报开始响铃以前的所有时间。我该如何解决这个问题?  这是我的闹钟功能

     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());
     }
}

1 个答案:

答案 0 :(得分:0)

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

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);