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örme

Bir hedefe varmayı algılama

Burada hedef, nihai hedefi veya yol noktasını 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.

Android için Navigation SDK'sı, varışta onArrival() geri çağırma işlevini tetikler ve adım adım yol tarifini durdurur. Bir sonraki ara noktaya ilerlemek için Navigator.continueToNextDestination(), adım adım navigasyona devam etmek için ise Navigator.startGuidance() numaralı telefonu açıkça aramanız gerekir.

continueToNextDestination() çağrısını yaptığınızda navigasyon cihazı önceki hedefle ilgili tüm bilgileri siler. Önceki rota segmentiyle ilgili bilgileri analiz etmek isterseniz continueToNextDestination() yöntemini çağırmadan önce navigasyondan bilgi almanız gerekir.

Bellek sızıntılarını önlemek için artık dinleyiciye ihtiyacınız kalmadığında removeArrivalListener(listener)'i aramanı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'dan RoadSnappedLocationProvider alın, ardından cihazın konumu veya yönü değiştiğinde geri arama için kaydolmak üzere RoadSnappedLocationProvider.addLocationListener()'i arayın. Bu konumun bir yola bağlandığını ve bu nedenle Google Play Hizmetleri konum API'lerinde birleştirilmiş konum sağlayıcı 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. Bir konum güncellemesi olduğunda Navigasyon SDK'sı onLocationChanged() geri çağırma işlevini tetikler.

Yoldan yakalanan konum güncellemeleri navigasyondan bağımsızdır ve navigasyon durdurulduktan sonra bile devam edebilir. Konum güncellemelerine abone olursanız ve konum güncellemelerini arka planda çalışır durumda bırakırsanız pilin hızlı tükenmesine, bellek sızıntısına veya cihaz konum verilerinin istenmeden toplanmasına neden olabilirsiniz. Dinleyiciye artık ihtiyacınız kalmadığında RoadSnappedLocationProvider.removeLocationListener düğmesini tıklayı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);
}

Zaman ve mesafe güncellemeleri alma

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

Zaman veya mesafedeki değişiklik belirtilen tutarı 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ürelerin ve mesafelerin kümülatif olduğunu unutmayın: Bunlar, bir ara noktadan diğerine değil, mevcut konumdan her ara noktaya olan süreyi ve mesafeyi gösterir. TimeAndDistance nesnesi artık delaySeverity değerini de döndürüyor. Bu enum ağır, orta, hafif veya bilinmiyor şeklindedir. Bu, Haritalar kullanıcı arayüzündeki tahmini varış süresinde gördüğünüz renge (yoğun = kırmızı, orta = sarı, açık = yeşil) karşılık gelir. Bu, kendi tahmini varış süresi altbilginizi oluşturmanız gerektiğinde yararlıdır.

Bellek sızıntısı olmaması için dinleyiciye artık ihtiyaç duymadığınızda 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. Süre ve mesafe ekranını gizlemek için bu değeri FALSE olarak ayarlayın.

getTimeAndDistanceList() yöntemini kullanarak birden fazla yol noktası için ETA'yı da gösterebilirsiniz.

Rota güncellemeleri alma

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

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

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız kalmadığında removeRouteChangedListener(listener)'i aramanı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 modunun ne zaman değiştiğini algılama

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

Aşağıdaki örnekte, bir gezinme fragmanı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);
    }
});

Gece modunu programatik olarak da ayarlayabilirsiniz. Daha fazla bilgi için Gece modunu ayarlama bölümüne bakın.