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

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

نظرة عامة

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

  • توفّر 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);
    }
});
.