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

Hedefe varmayı algılama

Burada hedef, nihai hedefi veya yol noktasını ifade eder. Varış anını algılamak için Navigator.addArrivalListener() adresini arayın. Bu adres, cihaz hedefe ulaştığında geri arama için kayıt yapar.

Android için Navigasyon SDK'sı, hedefe varıldığında onArrival() geri çağırma işlevini tetikler ve adım adım yol tarifini durdurur. Bir sonraki yol noktasına gitmek için Navigator.continueToNextDestination(), adım adım yol tarifine devam etmek için ise Navigator.startGuidance() işlevini açıkça çağırmanı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 istiyorsanız continueToNextDestination()'ü aramadan önce bilgileri navigasyon cihazından almanız gerekir.

Bellek sızıntısı olmaması için dinleyiciye artık ihtiyaç duymadığınızda removeArrivalListener(listener) çağrısını yapmanı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 faydalı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 veya kalan mesafe 100 metreden fazla değişirse geri arama istenir.

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

setEtaCardEnabled() yöntemini kullanarak ve TRUE değerine sahip bir parametre ileterek yerleşik ekranı kullanarak kalan süre ve mesafe bilgilerini gösterebilirsiniz. Zaman ve mesafe görüntülemesini devre dışı bırakmak 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ısı olmaması için dinleyiciye artık ihtiyaç duymadığınızda removeRouteChangedListener(listener) işlevini ç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 modunun ne zaman değiştiğini algılama

Gece modu değiştiğinde geri arama için kaydolmak üzere 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 başlıklı makaleyi inceleyin.