Navigasyon etkinliklerini dinleme

Uygulamanız, kullanıcı bir rota boyunca gezinirken 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 ulaşıldığını algılama

Burada hedef, son hedefi veya ara noktayı ifade eder. Varışın algılanması için Navigator.addArrivalListener() yöntemini çağırın. Bu yöntem, cihaz bir hedefe ulaştığında geri çağırma için kaydolur.

Varış noktasında Android için Navigasyon SDK'sı, onArrival() geri çağırma işlevini tetikler. Bu işlev, Navigator.stopGuidance() kullanarak adım adım rehberliği durdurmak veya Navigator.continueToNextDestination() kullanarak bir sonraki ara noktaya ilerlemek için kullanılabilir. Navigasyon oturumunda yalnızca tek bir hedef varsa veya hedef listesinde hedef kalmadıysa Navigator.continueToNextDestination() çağrısı, rehberliği otomatik olarak durdurur.

continueToNextDestination() yöntemini çağırdığınızda navigasyon, önceki hedefle ilgili tüm bilgileri siler. Önceki rota segmentiyle ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination() yöntemini ç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) yöntemini ç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 üzerinden bir RoadSnappedLocationProvider alın, ardından cihazın konumu veya yönü değiştiğinde geri çağırma için kaydolmak üzere RoadSnappedLocationProvider.addLocationListener() yöntemini çağırın. Bu konumun bir yola sabitlendiğini ve bu nedenle Google Play Hizmetleri konum API'lerindeki çok kaynaklı konum sağlayıcı tarafından döndürülen konumdan farklı olabileceğini unutmayın.

Navigation SDK'sı, konum güncellemelerini mümkün olduğunca sık sağlar. Konum güncellemesi olduğunda Navigation SDK'sı onLocationChanged() geri çağırma işlevini 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 tükenmesine, bellek sızıntısına veya cihaz konum verilerinin istemeden toplanmasına neden olabilir. Dinleyiciye artık ihtiyacınız olmadığında RoadSnappedLocationProvider.removeLocationListener yöntemini çağırı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şikten daha fazla değiştiğinde geri çağırma için kaydolmak üzere Navigator.addRemainingTimeOrDistanceChangedListener() yöntemini çağırın.

Süre veya mesafedeki değişiklik 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() deyin. Listedeki süre ve mesafelerin kümülatif olduğunu unutmayın. Bu değerler, bir noktadan diğerine değil, mevcut konumdan her bir noktaya olan süre ve mesafeyi gösterir. TimeAndDistance nesnesi delaySeverity değerini de döndürür. Bu enum HEAVY, MEDIUM, LIGHT veya UNKNOWN olabilir. Bu, Haritalar kullanıcı arayüzünde TVS için gördüğünüz renge karşılık gelir (yoğun = kırmızı, orta = sarı, hafif = yeşil). Kendi TVS altbilginizi oluşturmanız gerekiyorsa bu özellikten yararlanabilirsiniz.

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

Aşağıdaki örnekte, kalan süre 60 saniyeden fazla veya kalan mesafe 100 metreden fazla değişirse geri çağırma 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 gizlemek için bu değeri FALSE olarak ayarlayın.

getTimeAndDistanceList() yöntemini kullanarak birden fazla yol noktası için TVS'yi de gösterebilirsiniz.

Rota güncellemelerini alma

Rota değiştiğinde geri çağırma için kaydolmak üzere Navigator.addRouteChangedListener() yöntemini çağırı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() numaralı telefonları arayabilirsiniz.

Bellek sızıntılarını önlemek için dinleyiciye artık ihtiyacınız olmadığında removeRouteChangedListener(listener) yöntemini ç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 aranmak için kaydolmak üzere NavigationView.addOnNightModeChangedListener veya NavigationFragment.addOnNightModeChangedListener numaralı telefonu arayın.

Aşağıdaki örnekte, bir navigasyon 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.