因此,最简单的方法就是自己直接测试。
我在我的计算机上进行了测试,以下是我得到的结果:
这些PendingIntents是否不同?因为意图是不同的,但Id相同。
-是的,尽管Id相同,它们彼此不同。
如果我为这两个待处理意图设置闹钟管理器,它们会同时触发还是一个会替代另一个?
-它们都会被触发。
以下是我的测试代码,您可以复制并尝试:
将此方法复制到您的活动中,并调用它。
private void setAlarmManager() {
Log.v("AlarmManager", "Configuring AlarmManager...");
Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, PendingIntent.FLAG_CANCEL_CURRENT);
Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 20);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Log.v("AlarmManager", "Starting AlarmManager for >= KITKAT version");
alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1);
alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2);
} else {
Log.v("AlarmManager", "Starting AlarmManager for < KITKAT version");
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2);
}
Log.v("AlarmManager", "AlarmManager has been started");
}
创建您的第一个接收器类
public class AlarmReceiverFirst extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(this.getClass().getSimpleName(), "first alarm receiver is called");
}
}
创建第二个接收器类。
public class AlarmReceiverSecond extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(this.getClass().getSimpleName(), "second alarm receiver is called");
}
}
将这些接收器注册到您的清单中
<receiver android:name=".AlarmReceiverFirst" />
<receiver android:name=".AlarmReceiverSecond" />
请注意,这里所说的“Id”实际上是“请求代码(request code)”。它用于取消待处理的意图(pending intent)。
用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果您使用两个Intent对象,这两个对象根据Intent.filterEquals是等效的,则您将为它们都获得相同的PendingIntent。
- pskink