Android中同时显示多个警报 [英] Multiple alarms at the same time in Android

查看:70
本文介绍了Android中同时显示多个警报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这个问题上陷入困境.我已经阅读了很多关于堆栈溢出的解决方案,但是这些解决方案都没有解决我的问题.

I'm stuck on this problem. I've read many solutions on stack overflow but none of these have solved my problem.

这是我的代码: 在我的主要活动中,我写了这个-

Here's my code: In my Main Activity, I wrote this--

    this.context = this;
    Intent alarm = new Intent(this.context, AlarmManager.class);
    boolean alarmRun = (PendingIntent.getBroadcast(this.context,0,alarm, PendingIntent.FLAG_NO_CREATE) != null);
    if (alarmRun == false){
          PendingIntent pending = PendingIntent.getBroadcast(this.context, 0, alarm, 0);
          AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                    alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 15000, pending);
            }

因此,第一次打开该应用程序时,将调用Broadcast Receiver,即AlarmManager.java. 这是我在警报管理器"中所做的操作: 在我的onReceive中-

So the first time the app is opened a Broadcast Receiver is called which is the AlarmManager.java. Here's what I did in my Alarm Manager: In my onReceive--

AlarmDB db = new AlarmDB (context);

List<Alarm> alarms = db.getAlarm();

if(alarms != null)
{
    for (Alarm alarm : alarms)
    {
         Calendar calendar = Calendar.getInstance();
         final int nowHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
         final int nowMinute = Calendar.getInstance().get(Calendar.MINUTE);
         final int nowDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);

         calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(alarm.getAlarmHour()));
         calendar.set(Calendar.MINUTE, Integer.parseInt(alarm.getStartTimeMinute()));
         calendar.set(Calendar.SECOND, 00);

          PendingIntent pIntent = createPendingIntent(context, alarm);

          if (!(Integer.parseInt(alarm.getAlarmHour()) < nowHour) && !(Integer.parseInt(alarm.getAlarmHour()) == nowHour && Integer.parseInt(alarm.getStartTimeMinute()) <= nowMinute)) 
          {
                 AlarmManager alarmMgr = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
                 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) 
                 {
                       alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
                  } else {
                        alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
                  }
          }
      }
}

这是我单独制作的createPendingIntent方法:

And here's the createPendingIntent method I separately made:

private static PendingIntent createPendingIntent(Context context, Alarm m) {
        Intent i = new Intent(context, AlarmService.class);
        i.putExtra(ID, m.getID());
        i.putExtra(NAME, m.getMedName());

        return PendingIntent.getService(context, m.getID(), i, PendingIntent.FLAG_UPDATE_CURRENT);
    }

因此,每次当前时间与数据库中的时间匹配时,都会通过我的AlarmManager活动中的服务触发意图.请注意,在调用getService时,请求代码是数据库中的唯一ID.我的问题是,尽管我使用的是唯一的ID,但每次同时触发2个或更多警报时,只有其中一个成功触发.那我该怎么办呢?

So everytime the current time matches the time from the database an intent is fired through a service which is in my AlarmManager activity. Notice that in calling the getService, the request code is the unique id from database. My problem is eventhough I am using a unique id, everytime there is 2 or more alarm to be fired at the same time only one of those is sucessfully fired. So how should I do this?

推荐答案

if (alarmRun == false){
          PendingIntent pending = PendingIntent.getBroadcast(this.context, 0, alarm, 0);
          AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                    alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 15000, pending);
            }

调用setRepeating将导致以15000毫秒的间隔多次触发BroadcastReceiver.改为使用setExact.

Calling setRepeating will cause the BroadcastReceiver to be triggered multiple times at an interval of 15000 milliseconds. Use setExact instead.

这篇关于Android中同时显示多个警报的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆