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

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

نظرة عامة

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

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

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

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

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

عند الوصول، تُفعِّل حزمة تطوير البرامج للتنقّل على أجهزة Android معاودة الاتصال onArrival() التي يمكن استخدامها بعد ذلك لإيقاف الاتّجاهات المفصّلة باستخدام Navigator.stopGuidance() أو الانتقال إلى نقطة على المسار التالية باستخدام Navigator.continueToNextDestination(). إذا كانت جلسة التنقّل تتضمّن وجهة واحدة فقط أو إذا لم تتبقَّ أي وجهات في قائمة الوجهات، يؤدي استدعاء Navigator.continueToNextDestination() إلى إيقاف الإرشادات تلقائيًا.

عند استدعاء 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" واجهات برمجة التطبيقات للموقع الجغرافي.

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

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

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

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

عندما يتغيّر المسار، تُفعِّل حزمة تطوير البرامج للتنقّل معاودة الاتصال 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);
    }
});

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