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.

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. 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 von Nutzern die Berechtigung „Immer zulassen“ für den Standort anfordern. 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 Erteilung der Berechtigung die Genauigkeit der Standortangaben 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 entfernt werden

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

  • Rufen Sie nach dem Aufrufen von startGuidance() entweder stopGuidance() oder clearDestination() auf.
  • Nach der Registrierung von ArrivalListener müssen Sie die Registrierung wieder aufheben.
  • Nach der Registrierung von RoadSnappedLocationProvider müssen Sie die Registrierung wieder aufheben.

Wenn Sie diese Schritte ausführen, werden Benachrichtigungen nicht mehr angezeigt, wenn sie nicht mehr benötigt werden. Dadurch können Sie Akkuentladung und mögliche Arbeitsspeicherlecks vermeiden.

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 Foreground Service Manager 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 diese Änderungen zu berücksichtigen, wurde das Navigation SDK in Version 5.4.0 aktualisiert, um den Zugriff auf den Standort im Hintergrund besser zu verwalten. Wir empfehlen Ihnen außerdem, Ihre 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 Vordergrunddienst Nutzernachrichten für die Turn-by-Turn-Navigation 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 eine Berechtigung des Nutzers erforderlich. Wenn eine App standardmäßig nicht die Berechtigung des Nutzers für den Zugriff auf den Standort 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 den Standort 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.