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.
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 entwederstopGuidance()oderclearDestination()aufrufen. - Nachdem Sie
ArrivalListenerregistriert haben, müssen Sie die Registrierung wieder aufheben. - Nachdem Sie
RoadSnappedLocationProviderregistriert 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.