الاستماع إلى أحداث التنقّل

يمكن لتطبيقك الاستماع إلى الأحداث التي تقع أثناء تنقل المستخدم على طول المسار.

نظرة عامة

استخدِم الواجهات التالية للاستماع إلى أحداث التنقّل:

  • توفّر Navigator.ArrivalListener معاودة الاتصال onArrival() التي يتم تشغيلها عند وصول الجهاز إلى وجهة معيّنة.
  • يوفّر RoadSnappedLocationProvider.LocationListener رد الاتصال onLocationChanged()، الذي يتم تشغيله عند تغيُّر الموقع الجغرافي للجهاز.
  • Navigator.RemainingTimeOrDistanceChangedListener: توفّر هذه السمة استدعاء onRemainingTimeOrDistanceChanged()، الذي يتم تشغيله عندما يتغيّر الوقت أو المسافة إلى الوجهة التالية بأكثر من مبلغ معيّن.
  • يوفّر Navigator.RouteChangedListener استدعاء onRouteChanged()، الذي يتم تشغيله عند تغيير المسار.

الاطّلاع على الرمز

اكتشاف الوصول إلى وجهة معيّنة

هنا، تشير الوجهة إلى وجهة نهائية أو نقطة طريق. لرصد الوصول إلى الوجهة، اتصل بالرقم Navigator.addArrivalListener()، الذي يسجّل معاودة الاتصال عند وصول الجهاز إلى الوجهة.

وعند الوصول، تعمل حزمة تطوير البرامج (SDK) لميزة "التنقل" لأجهزة Android على إطلاق معاودة الاتصال onArrival() وإيقاف الإرشادات المفصّلة. يجب عليك استدعاء رمز Navigator.continueToNextDestination() بشكل صريح للانتقال إلى النقطة التالية، وNavigator.startGuidance() لمتابعة التنقّل باتّجاهات مفصّلة.

عند طلب 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".

توفر حزمة SDK للتنقل تحديثات الموقع قدر الإمكان. عند توفّر تحديث للموقع الجغرافي، تعمل حزمة تطوير البرامج (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() للتسجيل لمعاودة الاتصال عندما تتغيّر المدة المتبقية (بالثانية) أو المسافة (بالأمتار) بما يزيد عن حدّ معيّن.

عندما يتجاوز التغيير في الوقت أو المسافة الحدّ المحدَّد، تُنشِئ حزمة تطوير البرامج (SDK) للتنقّل رمز معاودة الاتصال onRemainingTimeOrDistanceChanged().

لمعرفة الوقت والمسافة المتبقية، يمكنك الاتصال بالرقم Navigator.getTimeAndDistanceList(). لاحظ أن الأوقات والمسافات في القائمة تراكمية: فهي تُظهر الوقت والمسافة من الموقع الحالي إلى كل نقطة طريق، وليس من نقطة طريق إلى أخرى. يعرض الكائن TimeAndDistance الآن أيضًا القيمة delaySeverity. سيكون هذا التعداد إما ثقيلًا أو متوسطًا أو خفيفًا أو غير معروف. هذا يتوافق مع اللون الذي تراه على الوقت المقدر في واجهة مستخدم الخرائط (ثقيل = أحمر، متوسط = أصفر، فاتح = أخضر). يعد ذلك مفيدًا إذا كنت بحاجة إلى إنشاء تذييل الوقت الفعلي الخاص بك.

لتجنُّب تسرُّب الذاكرة، عليك الاتصال برقم Navigator.removeRemainingTimeOrDistanceChangedListener(listener) إذا لم تعُد بحاجة إلى استخدام أداة الاستماع.

يطلب النموذج أدناه معاودة الاتصال إذا تغير الوقت المتبقي بأكثر من 60 ثانية أو إذا تغيرت المسافة المتبقية بأكثر من 100 متر.

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() للتسجيل لمعاودة الاتصال عند تغيير المسار.

عند تغيير المسار، تطلق حزمة تطوير البرامج (SDK) الخاصة بالتنقّل ميزة معاودة الاتصال 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 أو SupportNavigationFragment.addOnNightModeChangedListener للتسجيل لمعاودة الاتصال عند تغيير "الوضع الليلي".

يوضح المثال التالي الاستماع إلى تغييرات "الوضع الليلي" على أحد أجزاء التنقّل.

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