Navigasyon etkinliklerini dinleme

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

Genel Bakış

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

Kodu görüntüleme

Hedefe varışı algılama

Burada hedef, nihai hedef veya ara nokta anlamına gelir. Varışı algılamak için Navigator.addArrivalListener() numaralı telefonu arayın. Bu numara, cihaz hedefe ulaştığında geri arama için kaydolur.

Varışta Android için Navigasyon SDK'sı, onArrival() geri çağırmasını tetikler. Bu geri çağırma, Navigator.stopGuidance() kullanılarak adım adım yol tarifinin durdurulması veya Navigator.continueToNextDestination() kullanılarak bir sonraki yol noktasına geçilmesi için kullanılabilir. Geçiş oturumunda yalnızca tek bir hedef varsa veya hedefler listesinde hedef kalmadıysa Navigator.continueToNextDestination() çağrısı otomatik olarak rehberliği durdurur.

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

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız olmadığında removeArrivalListener(listener) işlevini ç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 adresinden RoadSnappedLocationProvider alın, ardından cihazın konumu veya yönü değiştiğinde geri arama için kaydolmak üzere RoadSnappedLocationProvider.addLocationListener() numaralı telefonu arayın. Bu konumun bir yola sabitlendiğini 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ı, konum güncellemelerini mümkün olduğunca sık sağlar. Konum güncellemesi olduğunda Navigation SDK, onLocationChanged() geri çağırmasını tetikler.

Yola sabitlenmiş konum güncellemeleri navigasyondan bağımsızdır ve navigasyon durdurulduktan sonra bile devam edebilir. Konum güncellemelerine abone olmak, konum güncellemelerini arka planda çalışır durumda bırakırsanız pilin boşalmasına, bellek sızıntısına veya cihaz konum verilerinin istenmeden 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 alma

Kalan süre (saniye) veya mesafe (metre) belirli bir eşiği aştığında geri arama kaydı için Navigator.addRemainingTimeOrDistanceChangedListener() numaralı telefonu arayın.

Süre veya mesafedeki değişiklik belirtilen miktarı aştığında Navigation SDK, 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 bir ara noktaya kadar 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 bilinmeyen olabilir. Bu, haritalar kullanıcı arayüzünde tahmini varış zamanında gördüğünüz renge karşılık gelir (yoğun = kırmızı, orta = sarı, hafif = yeşil). Bu, kendi tahmini varış zamanı altbilginizi oluşturmanız gerektiğinde faydalıdır.

Bellek sızıntılarını önlemek için dinleyiciye artık 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 bulunuluyor.

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österimini bastırmak için bu değeri FALSE olarak ayarlayın.

Ayrıca, getTimeAndDistanceList() yöntemini kullanarak birden fazla ara nokta için tahmini varış zamanını gösterebilirsiniz.

Rota güncellemelerini alma

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

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

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız olmadığında 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 modu değiştiğinde algılama

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

Aşağıdaki örnekte, bir gezinme parçasında gece modu değişikliklerinin nasıl dinleneceği 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.