Best Practices für die Standortermittlung im Hintergrund

Auf dieser Seite werden Best Practices für das Anfordern und Verwalten von Berechtigungen für die Standortermittlung im Hintergrund erläutert.

Berechtigung zur Standortermittlung „Immer zulassen“ anfordern

Ab Android 14 benötigen Apps die Berechtigung ACCESS_BACKGROUND_LOCATION, um auf den Standort des Nutzers zuzugreifen. Das Navigation SDK enthält diese Berechtigung in seiner Manifestdatei. Sie müssen sie also nicht explizit anfordern (sofern sie nicht für andere Zwecke benötigt wird), da sie durch die Gradle-Manifestzusammenführung mit dem Manifest der App zusammengeführt wird.

Die Berechtigung ACCESS_BACKGROUND_LOCATION reicht jedoch nicht aus, um im Hintergrund auf den Standort zuzugreifen. Wir empfehlen, dass Sie die Nutzer um die Berechtigung zur Standortermittlung „Immer zulassen“ bitten. So kann die App im Hintergrund ausgeführt werden und Benachrichtigungen anzeigen, was die Standortgenauigkeit während der Navigation maximiert.

In der Aufforderung sollte den Nutzern erklärt werden, wie die Erteilung der Berechtigung die Standortgenauigkeit und die Navigation verbessert, wenn die App im Hintergrund ausgeführt wird.

Beispiel für Berechtigungsdialog

Weitere Informationen dazu, wie Sie Nutzer um Zugriff auf den Standort bitten, finden Sie in der Android-Entwicklerdokumentation unter Berechtigungen zur Standortermittlung anfordern | Sensoren und Standort | Android-Entwickler.

Navigationsbenachrichtigungen ordnungsgemäß bereinigen

Damit Ihre App Benachrichtigungen nicht länger als nötig aufrechterhält, sollten Sie die folgenden Bereinigungsschritte ausführen:

  • Nachdem Sie startGuidance() aufgerufen haben, müssen Sie entweder stopGuidance() oder clearDestination() aufrufen.
  • Nachdem Sie ArrivalListener registriert haben, müssen Sie die Registrierung wieder aufheben.
  • Nachdem Sie RoadSnappedLocationProvider registriert haben, müssen Sie die Registrierung aufheben.

Durch diese Schritte wird sichergestellt, dass Benachrichtigungen nicht aktiv bleiben, wenn sie nicht mehr benötigt werden. Das könnte zu einer schnelleren Entladung des Akkus und zu Speicherlecks führen.

Wenn Sie die Methoden „NavigationApi#initForegroundServiceManager“ noch einmal aufrufen, rufen Sie zuerst „NavigationApi#clearForegroundServiceManager“ auf.

Wenn Ihre App das ForegroundServiceManager verwendet, rufen Sie NavigationApi#clearForegroundServiceManager auf, bevor Sie NavigationApi#initForegroundServiceManagerProvider aufrufen. Wenn Sie das ForegroundServiceManager bereits initialisiert haben, rufen Sie NavigationApi#initForegroundServiceManagerMessageAndIntent auf. So können Sie die Benachrichtigungs-ID oder den Benachrichtigungsinhalt aktualisieren, nachdem Sie den Manager für Dienste im Vordergrund initialisiert haben.

Neue Einschränkungen in Android 14

Mit Android 14 (Android U) wurden neue Einschränkungen für Apps eingeführt, die im Hintergrund auf den Standort des Nutzers zugreifen. Um die Auswirkungen dieser Änderungen zu minimieren, wurde das Navigation SDK in Version 5.4.0 aktualisiert, um den Zugriff auf die Standortermittlung im Hintergrund besser zu verwalten. Wir empfehlen außerdem, die Implementierung zu aktualisieren, damit Ihre App weiterhin Zugriff auf die genauesten Standortdaten hat.

Auswirkungen von Änderungen in Android 14 auf das Navigation SDK

Wenn Sie startGuidance() in Ihrer App aufrufen, werden im Dienst im Vordergrund Benachrichtigungen für die detaillierte Routenführung angezeigt. Die detaillierte Routenführung ist davon abhängig, dass auf den Standort des Nutzers zugegriffen werden kann, um die Route zu aktualisieren und die richtigen visuellen und akustischen Hinweise anzuzeigen. Ab Android 14 ist für den Zugriff auf den genauen Standort des Nutzers im Hintergrund die Berechtigung des Nutzers erforderlich. Wenn eine App nicht die Berechtigung des Nutzers für den Zugriff auf die Standortermittlung im Hintergrund hat und versucht, einen Dienst im Vordergrund für Standort-Updates zu starten, löst das System standardmäßig eine SecurityException aus, was zum Absturz der App führt.

Wie das Navigation SDK dieses Problem minimiert

Ab Version 5.4.0 verarbeitet das Navigation SDK diesen SecurityException, ohne die App zu beeinträchtigen. Die Navigation kann im Hintergrund weiterlaufen. Außerdem enthält das Navigation SDK die Berechtigung ACCESS_BACKGROUND_LOCATION in der AndroidManifest. So muss die Berechtigung nicht in der App selbst deklariert werden, da dies durch die Gradle-Zusammenführung erledigt wird. Wenn dem Nutzer jedoch keine Benachrichtigung angezeigt wird, bevor die App in den Hintergrund wechselt, verwendet das Navigations-SDK das System, um Standortaktualisierungen bereitzustellen. Diese Systemupdates sind möglicherweise nicht häufig oder präzise und führen zu einer suboptimalen Navigation. Daher empfehlen wir, Nutzer auch um Zugriff auf die Standortermittlung im Hintergrund zu bitten.

Was App-Entwickler tun können, um die Standortgenauigkeit für die Navigation zu verbessern

Sie können die Genauigkeit des vom Navigation SDK verwendeten Standortsignals verbessern, indem Sie Ihre App so aktualisieren, dass Nutzer aufgefordert werden, den Zugriff auf die Standortermittlung im Hintergrund zu gewähren. Weitere Informationen finden Sie unter Berechtigung zur Standortermittlung „Immer zulassen“ anfordern.