Ich versuche, meine erste Systemanwendung für Android in Bezug auf Geolocation und lokale Benachrichtigungen zu machen.
Ich stelle mir das so vor ... Es gibt eine grundlegende Aktivität MainActivity
. Nach dem Start startet es einen Dienst TestService
, der im Falle einer Änderung der Koordinaten sendet sie auf dem Server, und als Antwort erhält eine Nachricht, die als lokale Benachrichtigung angezeigt wird.
Und ich habe ein paar Probleme.
Wenn ich die Anwendung schließe (mit Hilfe des Task-Managers), wird der Dienst angehalten, so dass nach der Änderung der Koordinaten nichts passiert. Was brauche ich, damit der Service die ganze Zeit funktioniert? Oder es ist unmöglich?
Nach Aktivierung der lokalen Benachrichtigung wird NotifyActivity
gestartet, die detaillierte Informationen anzeigt. Dort klicke ich auf buttonDelete
- es schließt NotifyActivity
und startet MainActivity
. Aber wenn ich danach zum OS-Bildschirm (mit Back
button) und zurück (mit Task-Manager) wechseln, wird anstelle von 'MainActivity' wieder 'NotifyActivity' angezeigt.
Warum tritt es auf und wie vermeidet man es?
MainActivity
%Vor%Geolokalisierungsdienst
%Vor%lokale Benachrichtigungen
%Vor%Beispielprojekt hier
Fügen Sie in MainActivity diesen Code hinzu. Diese Methode wird Ihr zweites Problem lösen (Bus weiß immer noch nicht, wie ich das Problem mit dem Anwendungstitel in der Liste der letzten Apps lösen kann).
%Vor%Being hones Aktivitäten in Android haben viele Fallstricke. Daher ist mein Vorschlag, MainActivity vom Dienst zu starten und dann NotifyActivity zu starten. Dann können Sie MainActivity erneut starten (in diesem Fall müssen Sie LaunchMode = LaunchMode.SingleTop für MainActivity einstellen).
Für das erste Problem - haben Sie versucht, [Service (Process = ":remote")]
anstelle von [Service]
zu definieren?
Ich habe keine Erfahrung mit Xamarin, aber ich kann versuchen, die Fragen zu beantworten, da sie sich allgemein auf Android beziehen.
Frage 1
Wenn Sie Ihre App über den Task-Manager schließen, tun Sie mehr als nur das Schließen der App - Sie beenden den gesamten Prozess. Obwohl Sie das Verhalten Ihrer Nutzer nicht kontrollieren können, ist dies normalerweise nicht die Art und Weise, wie ein Android-Nutzer eine App stoppen soll. Der "richtige" Weg, um eine App zu schließen, besteht darin, sie einfach zu verlassen, wodurch der Prozess nicht zerstört wird und der Dienst im Hintergrund läuft.
Um Ihre Frage zu beantworten, glaube ich nicht, dass Sie irgendetwas tun können, um diese Situation zu umgehen, in der ein Nutzer den Prozess Ihrer App gewaltsam umbringt. Ich denke jedoch, dass Sie sich über diesen Randfall keine Sorgen machen müssen, da unter normalen Umständen der Prozess Ihrer App nicht beendet wird, bis das System es für richtig hält oder absolut benötigt. Daher sollte der Dienst weiter ausgeführt werden, wenn die App auf normale Weise geschlossen wird. Die Dokumente sagen:
Das System wird den Dienst so lange ausführen, wie es ist gestartet oder es gibt eine oder mehrere Verbindungen zu ihm mit der Context.BIND_AUTO_CREATE-Flag. Sobald keine dieser Situationen mehr besteht, Die Methode onDestroy () des Service wird aufgerufen und der Service ist effektiv beendet.
Also wird Ihr Service in Ordnung sein. Im Allgemeinen wird von Ihrer App nicht erwartet, dass sie Fälle behandelt, in denen der Prozess zwangsweise beendet wird.
Weitere Informationen zu Prozessen
Weitere Informationen zum Service-Lebenszyklus
Frage 2
Ich bin mir nicht sicher, was hier vor sich geht. Beim Betrachten Ihres verknüpften Projekts bemerke ich jedoch, dass Ihre AndroidManifest.xml
-Datei kaum ausgefüllt ist. Mein Verdacht ist, dass das Android-System ohne diese Datei nicht weiß, wie man den Backstack initialisiert, und es weiß nicht, welche Ihrer Aktivitäten die MAIN- und LAUNCHER-Aktivität ist.
Sie sollten Ihre Aktivitäten in AndroidManifest.xml
angeben, und darin sollten Sie angeben, dass MainActivity
Ihre MAIN- und LAUNCHER-Aktivität ist und dass sie ein Elternteil von NotifyActivity
ist. Auf diese Weise kann das System MainActivity
beim Start der App öffnen und weiß, dass es zurückkehrt, wenn Sie "zurück" von NotifyActivity
drücken. Etwas wie das:
Weitere Informationen zur Verwendung Ihres Android-Manifests
Hoffentlich hilft das Ihnen, Ihre Probleme zu lösen!