2

Während der Erstellung einer Alarm-Anwendung mit mehreren Alarmen Am PendingIntent mit verschiedenen Anfragecodes und einem AlarmService zur Anzeige von Dialogen Noch bevor der erste Dialog beendet oder beendet wird, erscheint der zweite Dialog. Wie kann ich das verhindern?Wie kann ich verhindern, dass zwei verschiedene Alarm-Alarmdialoge ausgelöst werden durch zwei anstehende Absichten mit unterschiedlichen Anfragecodes gleichzeitig

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

Antwort

0

Ich glaube, Sie haben zwei Möglichkeiten, dies zu umgehen:

1) Stellen Sie sicher, dass unterschiedliche Anforderung nicht zur gleichen Zeit auftreten. Dies kann durch Halten einer Liste aller Anforderungszeiten geschehen, und wenn eine neue mit einer bestehenden kollidiert, verzögere sie einfach um X Sekunden (mit dieser Implementierung ist nicht garantiert, dass es keine Kollisionen gibt, aber ihre Chance ist reduziert).

2) Verschieben Sie die Anzeige eines neuen Dialogfelds, bis das vorherige Dialogfeld geschlossen wird. Um dies zu implementieren, müssen Ihr Dialog und Ihr Dienst kommunizieren. Der Dialog muss benachrichtigt werden, wenn eine neue Nachricht aussteht, so dass er angezeigt werden kann, wenn das alte Dialogfeld geschlossen wird. & Der Dienst muss benachrichtigt werden, wenn das Dialogfeld deaktiviert ist. Wenn eine neue Nachricht angefordert wird, kann es angezeigt werden .

Verwandte Themen