如何防止两个不同的警报对话框同时由两个具有不同请求代码的未决意图触发

How can I prevent two different alarm alert dialog that are triggered by two pending intents with different request code at same time

在创建具有多个警报的警报应用程序时我正在使用具有不同请求代码的 PendingIntent 和一个 AlarmService 来显示对话框。在此期间,甚至在第一个对话框被推迟或关闭之前,第二个对话框弹出 up.How 我可以阻止这个吗.

 public void setAlarm() {
        AlarmManager amgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);       
        PendingIntent pi = PendingIntent.getService(context, requestcode, i, PendingIntent.FLAG_CANCEL_CURRENT);
         min = (amod.getHour() * 60) + amod.getMinute();
         amgr.set(amgr.RTC,System.currentTimeMillis()+(min*60*1000), pi);

}

public class AlarmService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    playTone();
    showDialog();

    return START_NOT_STICKY;
}

我认为你有两种选择来处理这个问题:

1) 确保不会同时出现不同的请求。这可以通过保存所有请求时间的列表来完成,如果一个新的请求时间与现有的请求时间发生冲突,只需将其延迟 X 秒(使用此实现,您不能保证没有冲突,但它们的机会会减少).

2) 推迟新对话框的显示,直到上一个对话框被关闭。要实现这一点,您的对话和服务需要进行通信。当新消息待处理时需要通知对话框,以便在关闭旧对话框时可以显示它,并且在清除对话框时需要通知服务,以便它知道如果请求新消息,它可以显示.