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

استخدِم هذا الدليل للسماح لتطبيقك بالاستماع إلى مجموعة متنوعة من الأحداث والاستجابة لها. تتغير أثناء تنقل المستخدم على طول المسار. لا يغطي هذا الدليل وتحديد المسار، والاستجابة فقط للأحداث على طول المسار.

نظرة عامة

توفر لك حزمة تطوير البرامج (SDK) للتنقل لنظام التشغيل iOS أدوات استماع المرتبطة بموقع المستخدم والظروف على طول المسار بيانات الوقت والمسافة المهمة. في وحدة تحكم العرض للخريطة، يبرز تطبيقك إلى تبني بروتوكولات مع هؤلاء المستمعين: GMSRoadSnappedLocationProviderListener أو GMSNavigatorListener

تعرض هذه القائمة طرق الاستماع المتاحة لأحداث التنقّل:

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

إعلان التوافق مع البروتوكولات المطلوبة

قبل تنفيذ طرق التنقل، يجب أن تتبنى وحدة التحكم في طريقة العرض البروتوكولات:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

بعد اعتماد بروتوكولات التنقل، اضبط أدوات معالجة الصوت على طريقة العرض المستخدم. على سبيل المثال، يمكنك إضافة الرمز التالي إلى viewDidLoad(). .

Swift

mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)

Objective-C

[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];

تلقّي تحديثات الموقع الجغرافي أو إيقافها

تحديثات الموقع مطلوبة لعرض تقدم المستخدم على الخريطة.

يعرض المثيل location السمات التالية:

خاصية الموقع الجغرافي الوصف
الارتفاع الارتفاع الحالي.
coordinate.latitude إحداثي خط العرض الحالي الذي تم التقاطه للطريق
coordinate.longitude إحداثي خط الطول الحالي الذي تم قطعه على الطريق
دورة الاتجاه الحالي بالدرجات.
السرعة السرعة الحالية
timestamp تاريخ/وقت القراءة الحالية.

لتلقي تحديثات الموقع الجغرافي بشكل مستمر، اتصل mapView.roadSnappedLocationProvider.startUpdatingLocation واستخدام GMSRoadSnappedLocationProviderListener للتعامل مع didUpdateLocation فعالية.

يوضح المثال التالي حالة الاتصال بالرقم startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

ينشئ الرمز التالي عنصر GMSRoadSnappedLocationProviderListener الذي معالجة حدث didUpdateLocation.

Swift

func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }

Objective-C

-   (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
    didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
    location.description); }

لتلقّي تحديثات بشأن الموقع الجغرافي عندما يعمل التطبيق في الخلفية، اضبط allowsBackgroundLocationUpdates إلى true:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

رصد أحداث الوصول

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

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

يعرض مثال الرمز التالي طريقة للتعامل مع didArriveAtWaypoint. الحدث:

Swift

func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
    arrived at: %@", waypoint.title); [_mapView.navigator
    continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

تلقّي تحديثات بشأن تغيير المسار

لتلقّي إشعار عند تغيير المسار، يمكنك إنشاء طريقة التعامل مع حدث navigatorDidChangeRoute. يمكنك الوصول إلى المسار الجديد من خلال باستخدام السمتَين routeLegs وcurrentRouteLeg في GMSNavigator.

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }

Objective-C

-   (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
    has changed."); }

وقت الاستلام المتعلّق بالتحديثات المتعلقة بوجهة الإعلانات

لتلقي تحديثات الوقت المستمر للوجهة، أنشئ طريقة للتعامل مع حدث واحد (didUpdateRemainingTime). توفر المعلمة time القيمة المقدَّرة المستخدم بالثواني إلى أن يتم الوصول إلى الوجهة التالية.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
    destination: %f", time); }

لضبط الحد الأدنى للتغيير في الوقت المقدر للوجهة التالية، اضبط فندق واحد (timeUpdateThreshold) في GMSNavigator يتم تحديد القيمة في ثوانٍ. إذا لم يتم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية وهي واحدة. ثانيًا.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

تلقي تحديثات المسافة إلى الوجهة

للحصول على تحديثات مستمرة حول المسافة إلى الوجهة، أنشِئ طريقة للتعامل مع البيانات الحدث didUpdateRemainingDistance. توفر المعلمة distance المسافة المقدرة بالأمتار، إلى الوجهة التالية.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
    distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
    next destination: %.2f.", miles]); }

لضبط أقل تغيير في المسافة المقدَّرة للوجهة التالية، عليك ضبط سمة distanceUpdateThreshold على GMSNavigator (القيمة محدّدة في متر). إذا لم يتم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية وهي واحدة. متر.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

تلقي تحديثات حركة المرور

لتلقي تحديثات مستمرة لتدفق حركة المرور للمسار المتبقي، أنشِئ طريقة لمعالجة حدث didUpdateDelayCategory. مكالمة إلى delayCategoryToNextDestination التي تُرجع GMSNavigationDelayCategory والتي قيمة تتراوح بين 0 و3. تستند التعديلات التي يتم إجراؤها على الفئة إلى القيمة الحالية موضع مستخدم التطبيق. إذا كانت بيانات حركة المرور غير متاحة، وتُرجع الدالة GMSNavigationDelayCategory القيمة 0. تشير الأرقام 1-3 إلى زيادة من الخفيفة إلى الثقيلة.

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }

Objective-C

-   (void)navigator:(GMSNavigator *)navigator
    didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
    NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }

تعرض السمة GMSNavigationDelayCategory مستويات التأخير التالية:

فئة التأخير الوصف
GMSNavigationDelayCategoryNoData 0 - غير متاح، أو لا توجد بيانات عن حركة المرور أو :
المسار.
GMSNavigationDelayCategoryHeavy 1 - ثقيل.
GMSNavigationDelayCategoryMedium 2 - متوسط
GMSNavigationDelayCategoryLight 3 - خفيف

جارٍ تلقّي تحديثات السرعة

لتلقّي الإشعارات عندما يتجاوز أحد السائقين الحدّ الأقصى للسرعة، يمكنك إنشاء طريقة. لمعالجة حدث didUpdateSpeedingPercentage.

Swift

// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }

Objective-C

// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }

جارٍ تغيير وضع الإضاءة المقترَح

لتلقّي آخر الأخبار حول التغييرات المقدَّرة في الإضاءة، يجب إنشاء طريقة للتعامل مع هذه التغييرات. الحدث didChangeSuggestedLightingMode.

Swift

// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")

 // Make the suggested change. mapView.lightingMode = lightingMode }

Objective-C

// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);

 // Make the suggested change. _mapView.lightingMode = lightingMode; }