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

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

نظرة عامة

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

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

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

رصد الوصول إلى وجهة

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

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

عند تغيير المسار، تُطلق حزمة Navigation 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 للتسجيل في خدمة تلقّي مكالمة عند تغيير الوضع الليلي.

يعرض المثال التالي الاستماع إلى التغييرات في الوضع الليلي على مقتطف navigation.

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

يمكنك أيضًا ضبط "الوضع الليلي" آليًا. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة ضبط وضع الليل.