Navigasyon etkinliklerini dinleme

Uygulamanız, kullanıcı bir rota üzerinde gezinirken gerçekleşen etkinlikleri dinleyebilir.

Genel bakış

Gezinme etkinliklerini dinlemek için aşağıdaki arayüzleri kullanın:

Kodu göster

Bir hedefe varışı algılama

Bu durumda hedef, son bir hedefi veya ara noktayı ifade eder. Varışı algılamak için cihaz bir hedefe ulaştığında geri çağırma amacıyla kaydedilen Navigator.addArrivalListener() yöntemini çağırın.

Hedefe varıldığında Android için Navigasyon SDK'sı onArrival() geri çağırmasını tetikler ve adım adım yardımı durdurur. Bir sonraki ara noktaya ilerlemek için Navigator.continueToNextDestination(), adım adım navigasyona devam etmek içinse Navigator.startGuidance() numaralı telefonu açıkça aramanız gerekir.

continueToNextDestination() numarasını aradığınızda, kılavuz önceki hedefle ilgili tüm bilgileri siler. Önceki rota segmentiyle ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination() yöntemini çağırmadan önce navigasyondan bilgi almanız gerekir.

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız kalmadığında removeArrivalListener(listener)'i çağırmanız gerekir.

mNavigator.addArrivalListener(new Navigator.ArrivalListener() {
    @Override
    public void onArrival(ArrivalEvent arrivalEvent) {
        displayMessage("onArrival: You've arrived at a waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_BOTH);
        // Start turn-by-turn guidance for the next leg of the route.
        if (arrivalEvent.isFinalDestination()) {
            displayMessage("onArrival: You've arrived at the final destination.",
                    DISPLAY_BOTH);
        } else {
            mNavigator.continueToNextDestination();
            mNavigator.startGuidance();
        }
    }
});

Konum güncellemelerini alma

NavigationApi adlı operatörden bir RoadSnappedLocationProvider edinin ve ardından cihazın konumu veya başlığı değiştiğinde geri çağırmaya kaydolmak için RoadSnappedLocationProvider.addLocationListener() numaralı telefonu arayın. Bu konumun bir yola sabitlendiğini ve bu nedenle, Google Play hizmetleri konum API'lerinde çok kaynaklı konum sağlayıcısı tarafından döndürülen konumdan farklı olabileceğini unutmayın.

Navigasyon SDK'sı mümkün olduğunca sık konum güncellemeleri sağlar. Konum güncellemesi mevcut olduğunda Gezinme SDK'sı onLocationChanged() geri çağırmasını tetikler.

Yola sığdırılan konum güncellemeleri navigasyondan bağımsızdır ve navigasyon durduktan sonra bile devam edebilir. Konum güncellemelerine abone olmak, konum güncellemelerini arka planda çalışır durumda bırakırsanız pilin bitmesine, bellek sızıntısına veya cihaz konum verilerinin istemsiz olarak toplanmasına neden olabilir. Dinleyiciye artık ihtiyacınız kalmadığında RoadSnappedLocationProvider.removeLocationListener numaralı telefonu arayın.

mRoadSnappedLocationProvider =
        NavigationApi.getRoadSnappedLocationProvider(getApplication());
if (mRoadSnappedLocationProvider != null) {
    mRoadSnappedLocationProvider.addLocationListener(
            new RoadSnappedLocationProvider.LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    displayMessage("onLocationUpdated: Navigation engine has provided a new"
                                    + " road-snapped location: "
                                    + location.toString(),
                            DISPLAY_LOG);
                }
            });
} else {
    displayMessage("ERROR: Failed to get a location provider", DISPLAY_LOG);
}

Süre ve mesafe güncellemelerini alın

Kalan süre (saniye) veya mesafe (metre) belirli bir eşikten fazla değiştiğinde geri çağırma için kaydolmak üzere Navigator.addRemainingTimeOrDistanceChangedListener() numaralı telefonu çağırın.

Süre veya mesafe değişikliği belirtilen tutarı aştığında Gezinme SDK'sı onRemainingTimeOrDistanceChanged() geri çağırmasını tetikler.

Kalan süreyi ve mesafeyi öğrenmek için Navigator.getTimeAndDistanceList() numaralı telefonu arayın. Listedeki sürelerin ve mesafelerin kümülatif olduğunu unutmayın. Bunlar, bir ara noktadan diğerine değil, mevcut konumdan her bir ara noktaya kadar olan süreyi ve mesafeyi gösterir. TimeAndDistance nesnesi artık delaySeverity değerini de döndürüyor. Bu sıralama ağır, meduim, hafif veya bilinmeyen olur. Bu, haritaların kullanıcı arayüzünde TVS'de gördüğünüz renge karşılık gelir (yoğun = kırmızı, orta = sarı, açık = yeşil). Bu, kendi GMR altbilginizi oluşturmanız gerektiğinde yararlıdır.

Bellek sızıntılarını önlemek için artık dinleyiciye ihtiyacınız olmadığında Navigator.removeRemainingTimeOrDistanceChangedListener(listener) işlevini çağırmanız gerekir.

Aşağıdaki örnekte, kalan süre 60 saniyeden fazla değişirse veya kalan mesafe 100 metreden fazla değişirse geri arama isteğinde bulunulur.

mNavigator.addRemainingTimeOrDistanceChangedListener(60, 100,
        new Navigator.RemainingTimeOrDistanceChangedListener() {
            @Override
            public void onRemainingTimeOrDistanceChanged() {
                displayMessage("onRemainingTimeOrDistanceChanged: Time or distance estimate"
                        + " has changed.",
                        DISPLAY_LOG);
            }
        });

Yerleşik ekranı kullanarak setEtaCardEnabled() yöntemini kullanıp TRUE değerine sahip bir parametre ileterek kalan süre ve mesafe bilgilerini gösterebilirsiniz. Saat/mesafe görüntüsünü gizlemek için bu değeri FALSE olarak ayarlayın.

Ayrıca getTimeAndDistanceList() yöntemini kullanarak birden fazla ara nokta için TVS'yi de gösterebilirsiniz.

Rota güncellemelerini alın

Rota değiştiğinde geri çağırmak için Navigator.addRouteChangedListener() numaralı telefonu arayın.

Rota değiştiğinde, Navigasyon SDK'sı onRouteChanged() geri çağırmasını tetikler. Yeni rotayı bulmak için Navigator.getRouteSegments ve Navigator.getCurrentRouteSegment() numaralı telefonu arayabilirsiniz.

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız kalmadığında removeRouteChangedListener(listener)'i çağırmanız gerekir.

mNavigator.addRouteChangedListener(new Navigator.RouteChangedListener() {
    @Override
    public void onRouteChanged() {
        displayMessage("onRouteChanged: The driver's route has changed. Current waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_LOG);
    }
});

Gece modu değiştiğinde algıla

Gece modu değiştiğinde geri aranmak için kaydolmak üzere NavigationView.addOnNightModeChangedListener veya SupportNavigationFragment.addOnNightModeChangedListener numaralı telefonu arayın.

Aşağıdaki örnekte, bir gezinme parçasında gece modu değişikliklerini dinleme gösterilmektedir.

mNavFragment.addOnNightModeChangedListener(new NavigationView.OnNightModeChangedListener() {
    @Override
    public void onNightModeChanged(NightModeChangedEvent nightModeChangedEvent) {
        displayMessage("Night mode is active: " + nightModeChangedEvent.inNightMode(),
        DISPLAY_LOG);
    }
});