
我被困在这个问题上.我已经阅读了许多关于堆栈溢出的解决方案,但是没有一个解决了我的问题.
这是我的代码:
在我的主要活动中,我写道:
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中同时显示多个警报所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)