2010-12-18 9 views
0

Ich habe eine Hauptaktivität A1 läuft. Es stellt einen Alarm a1 ein, der zum Zeitpunkt t1 erlischt. Ein Alarmempfänger AR1, der den Alarm a1 abfängt und einen Dienst S1 erstellt. Dienst S1 erzeugt eine Dialogaktivität A2 und setzt auch einen Alarm a2, der zum Zeitpunkt t2 erlischt. Ein weiterer Alarmempfänger AR2 fängt den Alarm a2 auf und ich brauche AR2, um die Dialogaktivität A2 zu beenden.Wie kille ich Aktivität von einem Service

Ich kann nicht sehen, wie der Dienst die Aktivität in den Griff bekommen kann, um sie zu töten oder ihre finish() -Methode aufzurufen.

Antwort

1

Zuerst wird Popup-Aktivitäten von einem BroadcastReceiver als schlechte Form betrachtet, außer in ungewöhnlichen Umständen, da es den Benutzer mitten in was auch immer sie tut, unterbrechen wird. Ich werde im Moment davon ausgehen, dass Sie die 1.337. Wecker-Anwendung für Android schreiben, und deshalb eine Aktivität von einem BroadcastReceiver basierend auf einem AlarmManager Alarm aufzudecken ist eine vernünftige Wahl (vorausgesetzt, der Benutzer hat es über die Präferenzen innerhalb angefordert deine App).

Vor diesem Hintergrund können Sie eine Aktivität von einem Dienst nicht "töten".

Sie können jedoch eine Nachricht an die Aktivität senden, wenn sie ausgeführt wird, und sie dann starten, wenn sie nicht ausgeführt wird.

Zum Beispiel könnten Sie eine georderte Sendung senden. Lassen Sie die Aktivität für Ihre Übertragung eine BroadcastReceiver mit hoher Priorität implementieren, und aktualisieren Sie sie selbst, damit sie den neuen Alarm widerspiegelt. Implementieren Sie eine niederpriore BroadcastReceiver woanders (z. B. in Ihrem Manifest), und lassen Sie die Dialogaktivität starten, falls die Aktivität nicht verfügbar ist, oder ergreifen Sie eine andere Aktion basierend auf Benutzereinstellungen (z. B. einfach eine Notification anzeigen).

+0

Wie können Sie eine Nachricht an eine aktuell ausgeführte Aktivität senden, wenn diese Aktivität den Startmodus "Standard" hat? –

+0

@Camille Sévigny: Sicher. Befolgen Sie das in der Antwort beschriebene Rezept. Hier ist eine Beispielimplementierung: https://github.com/commonsguy/cw-advandroid/tree/master/Broadcast/Ordered – CommonsWare

Verwandte Themen