Navigasyon etkinliklerini dinleme

Uygulamanız, kullanıcı bir rota üzerinde gezinirken oluşan etkinlikleri dinleyebilir.

Genel bakış

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

Kodu inceleyin

Bir hedefe varışı algılama

Burada hedef, bir son varış noktasını veya bir referans noktasını ifade eder. Varışı algılamak için Navigator.addArrivalListener() numaralı telefonu arayın. Cihaz bir hedefe ulaştığında geri çağırma kaydı yapılır.

Varışta, Android için Gezinme SDK'sı onArrival() geri çağırmasını etkinleştirir ve adım adım rehberliği durdurur. Bir sonraki ara noktaya ilerlemek için Navigator.continueToNextDestination() ve adım adım navigasyona devam etmek için Navigator.startGuidance() numaralı telefonu açıkça aramanız gerekir.

continueToNextDestination() çağırdığınızda gezgin, önceki hedefle ilgili tüm bilgileri siler. Önceki rota segmentiyle ilgili bilgileri analiz etmek isterseniz continueToNextDestination() işlevini çağırmadan önce navigasyondan bilgileri almanız gerekir.

Bellek sızıntılarını önlemek için işleyiciye artık ihtiyacınız kalmadığında removeArrivalListener(listener) öğesini ç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 cihazından bir RoadSnappedLocationProvider edinin, ardından cihazın konumu veya başlığı değiştiğinde geri çağırmaya kaydolmak için RoadSnappedLocationProvider.addLocationListener() numarasını arayın. Bu konumun bir yola sabitlendiğini ve bu nedenle bu konumun, Google Play hizmet konumu API'lerinde çok kaynaklı konum sağlayıcısı tarafından döndürülen konumdan farklı olabileceğini unutmayın.

Gezinme SDK'si, konum güncellemelerini mümkün olduğunca sık sağlar. Bir konum güncellemesi sunulduğunda, Navigasyon SDK'sı onLocationChanged() geri çağırma işlevini tetikler.

Yola eklenen konum güncellemeleri navigasyondan bağımsızdır ve navigasyon durduktan sonra bile çalışmaya 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 yanlışlıkla toplanmasına neden olabilir. Artık dinleyiciye 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ğırmaya kaydolmak için Navigator.addRemainingTimeOrDistanceChangedListener() numaralı telefonu arayın.

Zaman veya mesafe değişikliği belirtilen miktarı aştığında, Navigasyon SDK'sı onRemainingTimeOrDistanceChanged() geri çağırma işlevini tetikler.

Kalan süreyi ve mesafeyi öğrenmek için Navigator.getTimeAndDistanceList() numaralı telefonu arayın. Listedeki süre ve mesafelerin kümülatif olduğunu unutmayın: Bunlar, bir referans noktasından diğerine değil, geçerli konum ile 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 kalın, meduim, hafif veya bilinmeyen olur. Bu, harita kullanıcı arayüzünde TVa'da 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ı olur.

Bellek sızıntılarını önlemek için işleyiciye artık ihtiyacınız kalmadığında Navigator.removeRemainingTimeOrDistanceChangedListener(listener) yöntemini çağırmanız gerekir.

Aşağıdaki örnek, kalan süre 60 saniyeden fazla veya kalan mesafe 100 metreden fazla değişirse geri çağırma isteğinde bulunur.

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

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

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

Rota güncellemelerini alın

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

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

Bellek sızıntılarını önlemek için işleyiciye artık ihtiyacınız kalmadığında removeRouteChangedListener(listener) öğesini ç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 bunu algıla

Gece modu değiştiğinde geri aranmak üzere kaydolmak için 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);
    }
});