أحداث التنقّل

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

نظرة عامة

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

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

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

اكتشاف الوصول إلى وجهة

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

عند الوصول إلى الوجهة، تنشِّط حزمة تطوير البرامج (SDK) الخاصة بميزة "التنقل" عملية معاودة الاتصال في onArrival() وتوقِف الإرشادات المفصّلة. يجب الاتصال صراحةً بـ Navigator.continueToNextDestination() للانتقال إلى نقطة الطريق التالية، وNavigator.startGuidance() لمواصلة التنقّل باتّجاهات مفصّلة.

عند الاتصال بـ continueToNextDestination()، يتجاهل المستكشف جميع المعلومات المتعلقة بالوجهة السابقة. إذا كنت تريد تحليل معلومات حول قطاع المسار السابق، عليك استرداد المعلومات من أداة التنقّل قبل طلب الرقم continueToNextDestination().

لتجنُّب تسرّب الذاكرة، يجب الاتصال بـ setArrivalListener(null) عندما لا تكون بحاجة إلى المستمع.

mNavigator.setArrivalListener(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.requestLocationUpdates() للتسجيل للحصول على معاودة الاتصال عند تغيير موقع الجهاز أو عنوانه. يُرجى العِلم أنّ هذا الموقع الجغرافي يتم تثبيته على إحدى الطرق، وبالتالي قد يختلف عن الموقع الجغرافي الذي يعرضه موفِّر الموقع المدمج في واجهات برمجة التطبيقات للمواقع الجغرافية في "خدمات Google Play".

توفر حزمة SDK للتنقل تحديثات الموقع كلما أمكن ذلك. عند توفُّر تحديث للموقع الجغرافي، تعمل حزمة تطوير البرامج (SDK) للتنقّل على تنشيط معاودة الاتصال في onLocationChanged().

تعد تحديثات الموقع التي تم التقاطها على الطريق مستقلة عن التنقل، ويمكن أن تستمر حتى بعد توقف التنقل. قد يؤدي الاشتراك في تحديثات الموقع إلى استنزاف البطارية، أو تسرُّب الذاكرة، أو جمع بيانات موقع الجهاز غير مقصود، إذا تركت تحديثات الموقع قيد التشغيل في الخلفية. يمكنك الاتصال بالرقم RoadSnappedLocationProvider.stopRequestingLocationUpdates() عند عدم الحاجة إلى المستمع.

mRoadSnappedLocationProvider =
        NavigationApi.getRoadSnappedLocationProvider(getApplication());
if (mRoadSnappedLocationProvider != null) {
    mRoadSnappedLocationProvider.requestLocationUpdates(
            new RoadSnappedLocationProvider.LocationListener() {
                @Override
                public void onLocationChanged(LocationEvent locationEvent) {
                    displayMessage("onLocationUpdated: Navigation engine has provided a new"
                                    + " road-snapped location: "
                                    + locationEvent.getLocation().toString(),
                            DISPLAY_LOG);
                }
            });
} else {
    displayMessage("ERROR: Failed to get a location provider", DISPLAY_LOG);
}

تلقّي إشعارات بالوقت والمسافة

اتّصل على الرقم Navigator.setRemainingTimeOrDistanceChangedListener() للتسجيل في خدمة معاودة الاتصال عندما يتغيّر الوقت المتبقّي (بالثواني) أو المسافة (بالأمتار) بمقدار أكثر من حدّ معيّن.

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

لمعرفة الوقت المتبقي والمسافة المتبقية، يمكنك الاتصال بالرقم Navigator.getTimeAndDistanceList(). تجدر الإشارة إلى أن الأوقات والمسافة في القائمة تراكمية: فهي تعرض الوقت والمسافة من الموقع الحالي لكل نقطة طريق، وليس من نقطة طريق إلى أخرى. يعرض الكائن TimeAndDistance الآن أيضًا delaySeverity. سيكون هذا التعداد إما ثقيلًا أو متوسطًا أو خفيفًا أو مجهولاً. يتوافق هذا مع اللون الذي تراه على الوقت المقدر في واجهة مستخدم الخرائط (ثقيل = أحمر، متوسط = أصفر، فاتح = أخضر). هذا مفيد إذا كنت بحاجة إلى إنشاء تذييل خاص بك.

لتجنُّب تسرُّب الذاكرة، يجب طلب الرمز Navigator.clearRemainingTimeOrDistanceChangedListener() عندما لا تكون بحاجة إلى المستمع.

يطلب النموذج التالي معاودة الاتصال إذا تغير الوقت المتبقي بأكثر من 60 ثانية أو تغيرت المسافة المتبقية بأكثر من 100 متر.

mNavigator.setRemainingTimeOrDistanceChangedListener(60, 100,
        new Navigator.RemainingTimeOrDistanceChangedListener() {
            @Override
            public void onRemainingTimeOrDistanceChanged() {
                displayMessage("onRemainingTimeOrDistanceChanged: Time or distance estimate"
                        + " has changed.",
                        DISPLAY_LOG);
            }
        });

يمكنك عرض معلومات الوقت والمسافة المتبقية باستخدام الشاشة المدمجة باستخدام طريقة setEtaCardEnabled() وتمرير معلمة بالقيمة TRUE. لإيقاف عرض الوقت/المسافة، عيِّن هذه القيمة على FALSE.

يمكنك أيضًا عرض الوقت المقدّر للوصول لنقاط طريق متعدّدة باستخدام طريقة getTimeAndDistanceList().

تلقّي أحدث المعلومات عن المسار

اتصِل بالرقم Navigator.setRouteChangedListener() للتسجيل في معاودة الاتصال عند تغيير المسار.

عندما يتغير المسار، تنشِّط حزمة تطوير البرامج (SDK) الخاصة بالتنقل ميزة معاودة الاتصال في onRouteChanged(). يمكنك طلب رمزَي Navigator.getRouteSegments وNavigator.getCurrentRouteSegment() للعثور على المسار الجديد.

لتجنُّب تسرّب الذاكرة، يجب الاتصال بـ setRouteChangedListener(null) عندما لا تكون بحاجة إلى المستمع.

mNavigator.setRouteChangedListener(new Navigator.RouteChangedListener() {
    @Override
    public void onRouteChanged() {
        displayMessage("onRouteChanged: The driver's route has changed. Current waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_LOG);
    }
});

رصد تغيّر الوضع الليلي

اتصِل بالرقم NavigationFragment.setOnNightModeChangedListener أو NavigationView.setOnNightModeChangedListener أو SupportNavigationFragment.setOnNightModeChangedListener للتسجيل لطلب معاودة الاتصال عند تغيير الوضع الليلي.

يعرض المثال التالي الاستماع إلى تغييرات الوضع الليلي على NavigationFragment.

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

الخطوة التالية

إذا كان عقدك مع Google يحدّد الفوترة لكل معاملة، عليك إعداد المعاملات القابلة للفوترة. تعرَّف على كيفية تخصيص واجهة مستخدم التنقل.