Routen für einzelne Ziele

Folgen Sie dieser Anleitung, um mithilfe der Navigation SDK for Android In diesem Leitfaden wird davon ausgegangen, dass Sie das Navigation SDK in Ihre App einbinden, wie unter Richten Sie Ihr Projekt ein.

Zusammenfassung

  1. Fügen Sie Ihrer App ein UI-Element hinzu, entweder als Navigationsfragment oder als in der Navigationsansicht. Mit diesem UI-Element werden die interaktive Karte und die detaillierte Routenführung hinzugefügt. Navigations-UI zu Ihrer Aktivität.
  2. Berechtigung zur Standortermittlung anfordern. Deine App muss die Berechtigung zur Standortermittlung anfordern um den Gerätestandort zu ermitteln.
  3. Initialisieren Sie das SDK mithilfe der NavigationApi .
  4. Legen Sie ein Ziel fest und steuern Sie die detaillierte Routenführung mithilfe der Navigator . Dies umfasst drei Schritte:

  5. Erstellen Sie Ihre App und führen Sie sie aus.

Code

Einer App ein UI-Element hinzufügen

In diesem Abschnitt werden zwei Möglichkeiten zum Hinzufügen der interaktiven Karte und Benutzeroberfläche für die detaillierte Routenführung.

SupportNavigationFragment ist die UI-Komponente, die die visuelle Ausgabe der Navigation anzeigt, einschließlich eines interaktive Karte und detaillierte Routenführung. Sie können das Fragment in Ihre XML-Layoutdatei so, wie hier gezeigt:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.google.android.libraries.navigation.SupportNavigationFragment"
    android:id="@+id/navigation_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Alternativ können Sie das Fragment programmatisch erstellen, wie unter in der Android-Dokumentation unter Verwendung FragmentActivity.getSupportFragmentManager()

Als Alternative zu einem Fragment kann die UI-Komponente zum Anzeigen einer Karte für Navigation ist auch als NavigationView

Berechtigung zur Standortermittlung anfordern

In diesem Abschnitt wird beschrieben, wie Sie eine detaillierte Berechtigung zur Standortermittlung anfordern. Weitere Informationen finden Sie im Leitfaden zur Android-Berechtigungen:

  1. Berechtigung als untergeordnetes Element des Elements <manifest> in Ihrem Android-Gerät hinzufügen Manifest:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.navsdksingledestination">
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    </manifest>
    
  2. Fordern Sie in Ihrer App Laufzeitberechtigungen an, um dem Nutzer die Möglichkeit zu geben um die Berechtigung zur Standortermittlung zu erteilen oder zu verweigern. Mit dem folgenden Code wird überprüft, Nutzer hat eine gültige Berechtigung zur Standortermittlung erteilt. Falls nicht, wird die Berechtigung angefordert:

    if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
        mLocationPermissionGranted = true;
    } else {
        ActivityCompat.requestPermissions(this,
                new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION },
                PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
    }
    
    if (!mLocationPermissionGranted) {
        displayMessage("Error loading Navigation SDK: "
                + "The user has not granted location permission.");
        return;
    }
    
  3. Überschreibe den onRequestPermissionsResult()-Callback, um das Ergebnis von der Berechtigungsanfrage:

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        mLocationPermissionGranted = false;
        switch (requestCode) {
            case PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
                // If request is canceled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mLocationPermissionGranted = true;
                }
            }
        }
    }
    

Navigation SDK initialisieren

Die NavigationApi stellt eine Initialisierungslogik bereit, die deine App für die Verwendung von Google Navigation. In diesem Abschnitt erfahren Sie, wie Sie den Navigator initialisieren weitere Konfigurationen, die Sie für Ihre App aktivieren können:

  1. Initialisieren Sie das Navigation SDK und überschreiben Sie onNavigatorReady()-Callback zum Starten der Navigation, wenn der Navigator ist bereit.

  2. Optional. Konfiguriere die App so, dass Benachrichtigungen zu Anweisungen und Hintergrundinformationen werden beendet, wenn der Nutzer die App auf seinem Gerät schließt. Dieses hängt von Ihrem Geschäftsmodell ab. Sie können die Standardeinstellung die weiterhin die Abbiegeanweisungen und den Standort anzeigt, auch nach Schließen der App aktualisiert. Wenn Sie stattdessen Navigations- und Standortupdates angezeigt, wenn der Endnutzer die App geschlossen hat, diese Konfiguration verwenden.

  3. Optional. Aktivieren Sie Straßeneinschränkungen in unterstützten Ländern. Letztes Datum festlegen die Ziffer des Nummernschilds. Dieser Anruf muss nur einmal durchgeführt werden: nachfolgende wird es weiterhin verwendet. Dieser Anruf funktioniert nur in unterstützten Regionen. Weitere Informationen finden Sie unter Vom Navigation SDK unterstützte Länder

    NavigationApi.getNavigator(this, new NavigationApi.NavigatorListener() {
                /**
                 * Sets up the navigation UI when the navigator is ready for use.
                 */
                @Override
                public void onNavigatorReady(Navigator navigator) {
                    displayMessage("Navigator ready.");
                    mNavigator = navigator;
                    mNavFragment = (NavigationFragment) getFragmentManager()
                            .findFragmentById(R.id.navigation_fragment);
    
                    // Optional. Disable the guidance notifications and shut down the app
                    // and background service when the user closes the app.
                    // mNavigator.setTaskRemovedBehavior(Navigator.TaskRemovedBehavior.QUIT_SERVICE)
    
                    // Optional. Set the last digit of the car's license plate to get
                    // route restrictions for supported countries.
                    // mNavigator.setLicensePlateRestrictionInfo(getLastDigit(), "BZ");
    
                    // Set the camera to follow the device location with 'TILTED' driving view.
                    mNavFragment.getCamera().followMyLocation(Camera.Perspective.TILTED);
    
                    // Set the travel mode (DRIVING, WALKING, CYCLING, TWO_WHEELER, or TAXI).
                    mRoutingOptions = new RoutingOptions();
                    mRoutingOptions.travelMode(RoutingOptions.TravelMode.DRIVING);
    
                    // Navigate to a place, specified by Place ID.
                    navigateToPlace(SYDNEY_OPERA_HOUSE, mRoutingOptions);
                }
    
                /**
                 * Handles errors from the Navigation SDK.
                 * @param errorCode The error code returned by the navigator.
                 */
                @Override
                public void onError(@NavigationApi.ErrorCode int errorCode) {
                    switch (errorCode) {
                        case NavigationApi.ErrorCode.NOT_AUTHORIZED:
                            displayMessage("Error loading Navigation SDK: Your API key is "
                                    + "invalid or not authorized to use the Navigation SDK.");
                            break;
                        case NavigationApi.ErrorCode.TERMS_NOT_ACCEPTED:
                            displayMessage("Error loading Navigation SDK: User did not accept "
                                    + "the Navigation Terms of Use.");
                            break;
                        case NavigationApi.ErrorCode.NETWORK_ERROR:
                            displayMessage("Error loading Navigation SDK: Network error.");
                            break;
                        case NavigationApi.ErrorCode.LOCATION_PERMISSION_MISSING:
                            displayMessage("Error loading Navigation SDK: Location permission "
                                    + "is missing.");
                            break;
                        default:
                            displayMessage("Error loading Navigation SDK: " + errorCode);
                    }
                }
            });
    

Ziel festlegen

Die Navigator ermöglicht die Kontrolle über das Konfigurieren, Starten und Beenden einer Navigation. Reise.

Mit der Navigator im vorherigen Abschnitt abgerufen haben, Waypoint für diese Reise. Nach der Berechnung der Route SupportNavigationFragment zeigt eine Polylinie für die Route auf der Karte und eine Markierung am Ziel.

    private void navigateToPlace(String placeId, RoutingOptions travelMode) {
        Waypoint destination;
        try {
            destination = Waypoint.builder().setPlaceIdString(placeId).build();
        } catch (Waypoint.UnsupportedPlaceIdException e) {
            displayMessage("Error starting navigation: Place ID is not supported.");
            return;
        }

        // Create a future to await the result of the asynchronous navigator task.
        ListenableResultFuture<Navigator.RouteStatus> pendingRoute =
                mNavigator.setDestination(destination, travelMode);

        // Define the action to perform when the SDK has determined the route.
        pendingRoute.setOnResultListener(
                new ListenableResultFuture.OnResultListener<Navigator.RouteStatus>() {
                    @Override
                    public void onResult(Navigator.RouteStatus code) {
                        switch (code) {
                            case OK:
                                // Hide the toolbar to maximize the navigation UI.
                                if (getActionBar() != null) {
                                    getActionBar().hide();
                                }

                                // Enable voice audio guidance (through the device speaker).
                                mNavigator.setAudioGuidance(
                                        Navigator.AudioGuidance.VOICE_ALERTS_AND_GUIDANCE);

                                // Simulate vehicle progress along the route for demo/debug builds.
                                if (BuildConfig.DEBUG) {
                                    mNavigator.getSimulator().simulateLocationsAlongExistingRoute(
                                            new SimulationOptions().speedMultiplier(5));
                                }

                                // Start turn-by-turn guidance along the current route.
                                mNavigator.startGuidance();
                                break;
                            // Handle error conditions returned by the navigator.
                            case NO_ROUTE_FOUND:
                                displayMessage("Error starting navigation: No route found.");
                                break;
                            case NETWORK_ERROR:
                                displayMessage("Error starting navigation: Network error.");
                                break;
                            case ROUTE_CANCELED:
                                displayMessage("Error starting navigation: Route canceled.");
                                break;
                            default:
                                displayMessage("Error starting navigation: "
                                        + String.valueOf(code));
                        }
                    }
                });
    }

App erstellen und ausführen

  1. Verbinden Sie ein Android-Gerät mit Ihrem Computer. Android Studio folgen Anleitung zum Ausführen von Apps auf einem Hardwaregerät Alternativ können Sie ein virtuelles Gerät mit der Android Virtual Device (AVD) Manager: Beim Auswählen eines Emulators sollten Sie ein Image angeben, das die Google-APIs enthält.
  2. Klicken Sie in Android Studio auf die Menüoption Run oder das Wiedergabesymbol. Wählen Sie ein Gerät aus, wenn Sie dazu aufgefordert werden.

Tipps für eine verbesserte Nutzererfahrung

  • Der Nutzer muss die Nutzungsbedingungen von Google Navigation akzeptieren, bevor er Navigation verfügbar wird. Diese Zustimmung ist nur einmal erforderlich. Von Standardeinstellung ist, fordert das SDK die Annahme an, wenn der Navigator das erste Mal aufgerufen wird. Wenn Sie möchten, können Sie das Dialogfeld mit den Nutzungsbedingungen für die Navigation öffnen. zu einem frühen Zeitpunkt im UX-Ablauf Ihrer App, z. B. bei der Registrierung oder Anmeldung, mit TermsAndConditionsCheckOption
  • Um die Navigationsqualität und die Genauigkeit der voraussichtlichen Ankunftszeit deutlich zu verbessern, verwenden Sie Orts-IDs zum Initialisieren eines Wegpunkts anstelle von Längen- und Breitengrad Koordinaten.
  • In diesem Beispiel wird der Zielwegpunkt von einer bestimmten Orts-ID für den Opernhaus Sydney. Sie können die Orts-ID-Finder, um Orts-IDs für andere Orte.