Geolokalisierung, Service und lokale Benachrichtigungen

8

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.

  1. 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?

  2. 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

    
Dmi7ry 19.05.2015, 14:16
quelle

2 Antworten

1

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?

    
Artur Shamsutdinov 26.05.2015, 12:46
quelle
1

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:

%Vor%

Weitere Informationen zur Verwendung Ihres Android-Manifests

Hoffentlich hilft das Ihnen, Ihre Probleme zu lösen!

    
yuval 22.05.2015 00:59
quelle

Tags und Links