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

Varış noktasına 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 bir 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 tarifini durdurmak veya Navigator.continueToNextDestination() kullanılarak bir sonraki yol noktasına geçmek için kullanılabilir. Gezinme oturumu yalnızca tek bir hedef içeriyorsa veya hedef listesinde hedef kalmamışsa Navigator.continueToNextDestination() çağrıldığında rehberlik otomatik olarak durdurulur.

continueToNextDestination()'ı aradığınızda navigasyon cihazı, ö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'den RoadSnappedLocationProvider alın, ardından cihazın konumu veya yönü değiştiğinde geri arama için kaydolmak üzere RoadSnappedLocationProvider.addLocationListener()'ı 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ıştırmaya devam ederseniz pilin hızlı tükenmesine, 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);
}

Zaman ve mesafe güncellemelerini alma

Kalan süre (saniye) veya mesafe (metre) belirli bir eşiğin üzerinde değiştiğinde 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ğı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 kontrol noktasından diğerine değil, mevcut konumdan her bir kontrol noktasına kadar olan süreyi ve mesafeyi gösterir. TimeAndDistance nesnesi de delaySeverity değerini döndürür. Bu enum HEAVY, MEDIUM, LIGHT veya UNKNOWN'dür. Bu, Haritalar kullanıcı arayüzünde TVS için gördüğünüz renge karşılık gelir (yoğun = kırmızı, aracı = sarı, ışık = yeşil). Bu, kendi TVS 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 bulunulur.

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.

getTimeAndDistanceList() yöntemini kullanarak birden fazla ara nokta için tahmini varış zamanını da 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 modunun değiştiğini algılama

Gece modu değiştiğinde geri arama için kaydolmak üzere NavigationView.addOnNightModeChangedListener veya NavigationFragment.addOnNightModeChangedListener işlevini çağırı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.