گوش دادن به رویدادهای پیمایش

برنامه‌تان می‌تواند رویدادهایی را که هنگام پیمایش کاربر در مسیر رخ می‌دهد بشنود.

نمای کلی

از میاناهای زیر برای گوش دادن به رویدادهای پیمایش استفاده کنید:

  • Navigator.ArrivalListener فراخوانی برگشتی onArrival() را ارائه می‌دهد که وقتی دستگاه به مقصد می‌رسد راه‌اندازی می‌شود.
  • RoadSnappedLocationProvider.LocationListener فراخوانی برگشتی onLocationChanged() را ارائه می‌دهد که وقتی مکان دستگاه تغییر می‌کند راه‌اندازی می‌شود.
  • Navigator.RemainingTimeOrDistanceChangedListener فراخوانی برگشتی onRemainingTimeOrDistanceChanged() را ارائه می‌دهد که وقتی زمان یا فاصله تا مقصد بعدی بیشتر از مقدار مشخصی تغییر کند، راه‌اندازی می‌شود.
  • Navigator.RouteChangedListener فراخوانی برگشتی onRouteChanged() را ارائه می‌دهد که هنگام تغییر مسیر راه‌اندازی می‌شود.

دیدن کد

تشخیص رسیدن به مقصد

در اینجا، مقصد به مقصد نهایی یا نقطه‌مسیر اشاره دارد. برای تشخیص رسیدن، با Navigator.addArrivalListener() تماس بگیرید، که برای تماس برگشتی هنگام رسیدن دستگاه به مقصد ثبت‌نام می‌کند.

پس‌از رسیدن، Navigation SDK for Android فراخوانی برگشتی onArrival() را فعال می‌کند که سپس می‌توان از آن برای توقف راهنمایی گام‌به‌گام بااستفاده از Navigator.stopGuidance() یا رفتن به نقطه‌مسیر بعدی بااستفاده از Navigator.continueToNextDestination() استفاده کرد. اگر جلسه ناوبری فقط شامل یک مقصد باشد، یا اگر هیچ مقصدی در فهرست مقصدها باقی نمانده باشد، فراخوانی Navigator.continueToNextDestination() به‌طور خودکار راهنمایی را متوقف می‌کند.

وقتی با continueToNextDestination() تماس می‌گیرید، ناوبر همه اطلاعات مربوط به مقصد قبلی را دور می‌اندازد. اگر می‌خواهید اطلاعات مربوط به بخش قبلی مسیر را تجزیه‌وتحلیل کنید، باید قبل‌از فراخوانی continueToNextDestination()، اطلاعات را از راهبر بازیابی کنید.

برای جلوگیری از نشت حافظه، وقتی دیگر به شنونده نیاز ندارید، باید removeArrivalListener(listener) را فراخوانی کنید.

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

دریافت به‌روزرسانی‌های مکان

RoadSnappedLocationProvider را از NavigationApi دریافت کنید، سپس RoadSnappedLocationProvider.addLocationListener() را فراخوانی کنید تا برای تماس برگشتی هنگام تغییر مکان یا جهت دستگاه ثبت‌نام کنید. توجه داشته باشید که این مکان به جاده‌ای متصل شده است و بنابراین ممکن است با مکانی که ارائه‌کننده مکان تلفیقی در میاناهای برنامه‌سازی کاربردی مکان «خدمات Google Play» برمی‌گرداند متفاوت باشد.

کیت توسعه نرم‌افزار پیمایش به‌روزرسانی‌های مکان را تا حد امکان به‌طور مکرر ارائه می‌دهد. وقتی به‌روزرسانی مکان دردسترس باشد، Navigation SDK فراخوان برگشتی onLocationChanged() را اجرا می‌کند.

به‌روزرسانی‌های مکان منطبق بر جاده مستقل از ناوبری هستند و می‌توانند حتی پس‌از توقف ناوبری ادامه یابند. اگر به‌روزرسانی‌های مکان را در پس‌زمینه درحال اجرا رها کنید، مشترک شدن در به‌روزرسانی‌های مکان ممکن است باعث تخلیه باتری، نشت حافظه، یا جمع‌آوری ناخواسته داده‌های مکان دستگاه شود. وقتی دیگر به شنونده نیاز ندارید، RoadSnappedLocationProvider.removeLocationListener را فراخوانی کنید.

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

دریافت به‌روزرسانی‌های زمان و مسافت

برای ثبت تماس برگشتی، وقتی زمان باقی‌مانده (ثانیه) یا فاصله (متر) بیشتر از آستانه مشخص‌شده تغییر می‌کند، Navigator.addRemainingTimeOrDistanceChangedListener() را فراخوانی کنید.

وقتی تغییر زمان یا مسافت از مقدار مشخص‌شده فراتر می‌رود، Navigation SDK فراخوان برگشتی onRemainingTimeOrDistanceChanged() را فعال می‌کند.

برای اطلاع از زمان و مسافت باقی‌مانده، با Navigator.getTimeAndDistanceList() تماس بگیرید. توجه داشته باشید که زمان‌ها و فاصله‌ها در فهرست تجمعی هستند: آن‌ها زمان و فاصله از مکان فعلی تا هر نقطه‌مسیر را نشان می‌دهند، نه از یک نقطه‌مسیر به نقطه‌مسیر دیگر. شیء TimeAndDistance همچنین delaySeverity را برمی‌گرداند. این شمارشی HEAVY، MEDIUM، LIGHT، یا UNKNOWN است. این با رنگی که برای زمان تخمینی رسیدن در میانای کاربری Maps می‌بینید مطابقت دارد (سنگین = قرمز، متوسط = زرد، سبک = سبز). اگر لازم است پانویس زمان تخمینی ورود خودتان را ایجاد کنید، این گزینه مفید است.

برای جلوگیری از نشت حافظه، باید Navigator.removeRemainingTimeOrDistanceChangedListener(listener) را زمانی که دیگر به شنونده نیاز ندارید فراخوانی کنید.

نمونه زیر درصورتی‌که زمان باقی‌مانده بیش‌از ۶۰ ثانیه تغییر کند یا فاصله باقی‌مانده بیش‌از ۱۰۰ متر تغییر کند، درخواست بازخوانی می‌کند.

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

می‌توانید اطلاعات زمان و مسافت باقی‌مانده را بااستفاده از نمایشگر داخلی بااستفاده از روش setEtaCardEnabled() و ارسال پارامتری با مقدار TRUE نشان دهید. برای پنهان کردن نمایش زمان و فاصله، این مقدار را روی FALSE تنظیم کنید.

همچنین می‌توانید زمان تخمینی رسیدن را برای چند نقطه‌مسیر بااستفاده از روش getTimeAndDistanceList() نمایش دهید.

دریافت به‌روزرسانی‌های مسیر

با Navigator.addRouteChangedListener() تماس بگیرید تا درصورت تغییر مسیر، برای تماس برگشتی ثبت‌نام کنید.

وقتی مسیر تغییر می‌کند، «کیت توسعه نرم‌افزار ناوبری» onRouteChanged() را فراخوانی می‌کند. می‌توانید با Navigator.getRouteSegments و Navigator.getCurrentRouteSegment() تماس بگیرید تا مسیر جدید را پیدا کنید.

برای جلوگیری از نشت حافظه، وقتی دیگر به شنونده نیاز ندارید، باید removeRouteChangedListener(listener) را فراخوانی کنید.

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

تشخیص تغییر حالت شب

با NavigationView.addOnNightModeChangedListener یا NavigationFragment.addOnNightModeChangedListener تماس بگیرید تا برای تماس برگشتی هنگام تغییر حالت شب ثبت‌نام کنید.

مثال زیر گوش دادن به تغییرات حالت شب را در قطعه ناوبری نشان می‌دهد.

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

همچنین می‌توانید حالت شب را به‌صورت برنامه‌ریزی‌شده تنظیم کنید. برای اطلاعات بیشتر، به تنظیم حالت شب مراجعه کنید.