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

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

نظرة عامة

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

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

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

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

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

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

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

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

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