使用 BroadcastReceiver 和 AlarmManager 的多个警报

Multiple Alarms using BroadcastReceiver and AlarmManager

我一直在寻找如何使用多个警报,并且确实在 Whosebug 中找到了 post,但从来没有一个直接的答案。

我正在尝试设置多个将呼叫接收者的警报 class(在我的例子中是 AlarmBcast),并根据触发呼叫的警报采取不同的操作。

在这一点上,我按照自己的方式为每个警报呼叫创建了不同的接收器 classes(因此有一个不同的 Intent,每个都有自己的 PendintIntent)。

我在其他帖子中读到有人建议让警报堆栈(列表)可见,因此对所有警报使用一个接收器 class,但这不是我想采用的方法。

有一种方法可以“查看”哪个 pendingintent 负责调用?。 仅传递了意图,但由于只有一个,无法获取来自哪个调用。

在采用多个接收者的方式之前,这是我的代码(伪)的样子

正在设置闹钟...

public class SelectedService extends Service {
   //get dates from main 
   //do some date math
     AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
     Intent _myIntent = new Intent(this, AlarmBcast.class);
   //setting Alarm A
     PendingIntent _myPendingIntent = PendingIntent.getBroadcast(this, 123, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
     alarmManager.set(AlarmManager.RTC_WAKEUP, partidocalendar.getTimeInMillis(),_myPendingIntent);
   //setting Alarm B
     PendingIntent _myPendingIntent2 = PendingIntent.getBroadcast(this, 124, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
     alarmManager.set(AlarmManager.RTC_WAKEUP, convopartidocalendar.getTimeInMillis(),_myPendingIntent2);
   //setting Alarm C

我计划中的接收器...

public class AlarmBcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //how to identify call A from B ??
    if(AlarmA){}
    if(AlarmB){}
    }

也许我有一些概念上的错误? 15 年后回到编程(之前主要是汇编)

您可以在 Intent 中添加一个“extra”来标识它是哪个警报。例如:

_myIntent.putExtra("alarm", "A");

在为每个不同的警报调用 PendingIntent.getBroadcast() 之前执行此操作。

然后,在您的 BroadcastReceiver.onReceive() 中,您可以检查 Intent 中的“额外”以确定触发了哪个警报。