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 Hintergrundstandortnutzung beschrieben.

Berechtigungen 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. Der Gradle-Manifest-Merger sorgt dafür, dass sie 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 Nutzer um die Berechtigung „Immer zulassen“ für den Standortzugriff bitten. So kann die App im Hintergrund ausgeführt werden und Benachrichtigungen anzeigen. Das maximiert die Standortgenauigkeit während der Navigation.

Im Prompt sollte Nutzern erklärt werden, wie die Berechtigung die Genauigkeit der Standortbestimmung und die Navigation verbessert, wenn die App im Hintergrund ausgeführt wird.

Beispiel für Berechtigungsdialogfeld

Weitere Informationen zum Auffordern von Nutzern, den Standortzugriff zu gewähren, finden Sie in der Android-Entwicklerdokumentation unter Standortberechtigungen anfordern | Sensoren und Standort | Android-Entwickler.

Sicherstellen, dass Navigationsbenachrichtigungen richtig bereinigt werden

Damit Benachrichtigungen in Ihrer App nicht mehr angezeigt werden, wenn sie nicht mehr benötigt werden, müssen 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 es wieder abmelden.
  • Nachdem Sie RoadSnappedLocationProvider registriert haben, müssen Sie es wieder abmelden.

Wenn Sie diese Schritte ausführen, werden Benachrichtigungen nicht mehr angezeigt, wenn sie nicht mehr benötigt werden. Dadurch wird der Akku geschont und es kann nicht zu Speicherlecks kommen.

Rufen Sie vor dem erneuten Aufrufen von NavigationApi#initForegroundServiceManager-Methoden zuerst NavigationApi#clearForegroundServiceManager auf.

Wenn Ihre App ForegroundServiceManager verwendet, rufen Sie NavigationApi#clearForegroundServiceManager vor NavigationApi#initForegroundServiceManagerProvider auf. Wenn Sie ForegroundServiceManager bereits initialisiert haben, rufen Sie NavigationApi#initForegroundServiceManagerMessageAndIntent auf. So können Sie die Benachrichtigungs-ID oder den Benachrichtigungsinhalt aktualisieren, nachdem Sie den Dienstmanager im Vordergrund initialisiert haben.

Neue Einschränkungen in Android 14

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

Auswirkungen von Änderungen in Android 14 auf das Navigation SDK

Wenn Sie startGuidance() in Ihrer App aufrufen, werden im Vordergrunddienst Nutzern 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 richtige visuelle und akustische Anleitung zu geben. Ab Android 14 ist für den Zugriff auf den genauen Standort des Nutzers im Hintergrund die Berechtigung des Nutzers erforderlich. Wenn eine App standardmäßig nicht die Berechtigung des Nutzers für die Standortermittlung im Hintergrund hat und versucht, einen Dienst im Vordergrund für Standortaktualisierungen zu starten, löst das System eine SecurityException aus, wodurch die App abstürzt.

So wird dieses Problem durch das Navigation SDK behoben

Ab Version 5.4.0 verarbeitet das Navigation SDK dieses SecurityException, ohne die App zu beeinträchtigen. Die Navigation kann also im Hintergrund weiterlaufen. Außerdem ist im Navigation SDK die Berechtigung ACCESS_BACKGROUND_LOCATION in der AndroidManifest enthalten. So muss Ihre App die Berechtigung nicht selbst deklarieren, da sie durch das Zusammenführen von Gradle behandelt wird. Wenn dem Nutzer jedoch keine Benachrichtigung angezeigt wird, bevor die App in den Hintergrund wechselt, ist das Navigation SDK auf das System angewiesen, um Standortaktualisierungen zu erhalten. Diese Systemupdates sind möglicherweise nicht häufig oder präzise und können zu einer suboptimalen Navigation führen. 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 um Zugriff auf den Standort im Hintergrund gebeten werden. Weitere Informationen finden Sie unter Berechtigungen zur Standortermittlung „Immer zulassen“ anfordern.