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

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

نظرة عامة

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

  • يوفّر 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. سيكون هذا التصنيف إما شديد أو متوسط أو خفيف أو غير معروف. ويتوافق ذلك مع اللون الذي يظهر أمامك في واجهة مستخدم "خرائط Google" (الكثافة العالية = اللون الأحمر، والكثافة المتوسطة = اللون الأصفر، والكثافة المنخفضة = اللون الأخضر). يكون ذلك مفعّلاً إذا كنت بحاجة إلى إنشاء تذييل تقدير وقت الوصول الخاص بك.

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

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

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

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