Android中同时显示多个警报

Android中同时显示多个警报,第1张

概述我被困在这个问题上.我已经阅读了许多关于堆栈溢出的解决方案,但是没有一个解决了我的问题.这是我的代码:在我的主要活动中,我写道:this.context=this;Intentalarm=newIntent(this.context,AlarmManager.class);booleanalarmRun=(PendingIntent.getBroad

我被困在这个问题上.我已经阅读了许多关于堆栈溢出的解决方案,但是没有一个解决了我的问题.

这是我的代码:
在我的主要活动中,我写道:

    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中-

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方法:

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个或更多警报时,只有其中一个成功触发.那我该怎么做呢?

解决方法:

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.

总结

以上是内存溢出为你收集整理的Android中同时显示多个警报全部内容,希望文章能够帮你解决Android中同时显示多个警报所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1093057.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存