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

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

نظرة عامة

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

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

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

هنا، تشير الوجهة إلى وجهة نهائية أو نقطة طريق. إلى رصد وقت الوصول أو الاتصال برقم 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);
    }
});
.