Memproses peristiwa navigasi

Aplikasi Anda dapat memproses peristiwa yang terjadi saat pengguna bernavigasi di sepanjang rute.

Ringkasan

Gunakan antarmuka berikut untuk memproses peristiwa navigasi:

Melihat kode

Mendeteksi kedatangan di tujuan

Di sini, tujuan mengacu pada tujuan akhir atau titik jalan. Kepada deteksi kedatangan, panggil Navigator.addArrivalListener(), yang mendaftarkan callback saat perangkat mencapai tujuan.

Setelah tiba, Navigation SDK untuk Android diaktifkan callback onArrival() dan menghentikan panduan belokan demi belokan. Anda harus secara eksplisit memanggil Navigator.continueToNextDestination() untuk maju ke titik jalan berikutnya, dan Navigator.startGuidance() ke melanjutkan navigasi belokan demi belokan.

Saat Anda memanggil continueToNextDestination(), navigator akan menghapus semua informasi tentang tujuan sebelumnya. Jika Anda ingin menganalisis informasi tentang segmen rute sebelumnya, Anda harus mengambil informasi dari navigator sebelum memanggil continueToNextDestination().

Untuk menghindari kebocoran memori, Anda harus memanggil removeArrivalListener(listener) jika tidak lagi membutuhkan pemroses.

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();
        }
    }
});

Menerima pembaruan lokasi

Dapatkan RoadSnappedLocationProvider dari NavigationApi, lalu panggil RoadSnappedLocationProvider.addLocationListener() untuk mendaftarkan callback saat lokasi atau arah perangkat berubah. Perhatikan bahwa lokasi ini diikat ke jalan, sehingga mungkin berbeda dari lokasi yang ditampilkan oleh penyedia lokasi gabungan di Google Play Location API layanan.

Navigation SDK memberikan pembaruan lokasi sesering mungkin sebaik mungkin. Saat pembaruan lokasi tersedia, Navigation SDK mengaktifkan Callback onLocationChanged().

Pembaruan lokasi yang diambil dari jalan tidak bergantung pada navigasi, dan dapat melanjutkan bahkan setelah navigasi berhenti. Berlangganan pembaruan lokasi dapat menyebabkan kehabisan baterai, kebocoran memori, atau pengumpulan lokasi perangkat yang tidak disengaja data jika Anda membiarkan pembaruan lokasi berjalan di latar belakang. Telepon RoadSnappedLocationProvider.removeLocationListener ketika Anda tidak lagi membutuhkan pemroses.

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);
}

Terima info terbaru waktu dan jarak

Panggil Navigator.addRemainingTimeOrDistanceChangedListener() untuk mendaftarkan callback saat waktu (detik) atau jarak yang tersisa (meter) berubah lebih dari nilai minimum yang ditentukan.

Ketika perubahan waktu atau jarak melebihi jumlah yang ditentukan, Navigation SDK mengaktifkan onRemainingTimeOrDistanceChanged() .

Untuk menemukan sisa waktu dan jarak, panggil Navigator.getTimeAndDistanceList() Perhatikan bahwa waktu dan jarak dalam daftar bersifat kumulatif: keduanya menunjukkan waktu dan jarak dari lokasi saat ini ke setiap titik jalan, bukan dari satu titik jalan ke titik jalan yang lain. Objek TimeAndDistance sekarang juga menampilkan delaySeverity. Enum ini akan akan berat, meduim, ringan, atau tidak diketahui. Ini sesuai dengan warna yang Anda lihat di eta di UI peta (berat = merah, sedang = kuning, terang = hijau). Ini adalah akan membantu jika Anda perlu membuat {i>footer eta<i} sendiri.

Untuk menghindari kebocoran memori, Anda harus memanggil Navigator.removeRemainingTimeOrDistanceChangedListener(listener) ketika Anda tidak lagi membutuhkan pemroses.

Contoh di bawah ini meminta callback jika waktu yang tersisa berubah lebih dari 60 detik atau jarak yang tersisa berubah lebih dari 100 meter.

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

Anda dapat menampilkan informasi waktu dan jarak yang tersisa menggunakan tampilkan menggunakan metode setEtaCardEnabled() dan meneruskan parameter dengan nilai TRUE. Untuk menyembunyikan waktu/jarak Display, tetapkan nilai ini ke FALSE.

Anda juga dapat mengekspos PWT untuk beberapa titik jalan menggunakan Metode getTimeAndDistanceList().

Terima info terbaru rute

Panggil Navigator.addRouteChangedListener() ke mendaftarkan callback saat rute berubah.

Saat rute berubah, Navigation SDK akan mengaktifkan Callback onRouteChanged(). Anda dapat memanggil Navigator.getRouteSegments dan Navigator.getCurrentRouteSegment() untuk menemukan rute perjalanan.

Untuk menghindari kebocoran memori, Anda harus memanggil removeRouteChangedListener(listener) jika tidak lagi membutuhkan pemroses.

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);
    }
});

Mendeteksi saat perubahan mode malam

Panggil NavigationView.addOnNightModeChangedListener atau SupportNavigationFragment.addOnNightModeChangedListener untuk mendaftarkan callback ketika mode malam berubah.

Contoh berikut menunjukkan mendengarkan perubahan mode malam pada fragmen navigasi.

mNavFragment.addOnNightModeChangedListener(new NavigationView.OnNightModeChangedListener() {
    @Override
    public void onNightModeChanged(NightModeChangedEvent nightModeChangedEvent) {
        displayMessage("Night mode is active: " + nightModeChangedEvent.inNightMode(),
        DISPLAY_LOG);
    }
});