gpt4 book ai didi

android - Android 中同时发出多个警报

转载 作者:行者123 更新时间:2023-11-30 01:33:35 25 4
gpt4 key购买 nike

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

这是我的代码:在我的主要 Activity 中,我写了这个——

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

所以第一次打开应用程序时,会调用广播接收器,即 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 Activity 中的服务触发一个 Intent 。请注意,在调用 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 将导致BroadcastReceiver 以15000 毫秒为间隔多次触发。请改用 setExact

关于android - Android 中同时发出多个警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com