Navigasyon etkinliklerini dinleme

Uygulamanızın, kullanıcı bir rotada gezinirken değişen çeşitli etkinlikleri dinleyip yanıt vermesini sağlamak için bu kılavuzu kullanın. Bu kılavuzda rota tanımlama ele alınmamaktadır, yalnızca rota üzerindeki etkinliklere yanıt verilir.

Genel bakış

iOS için Gezinme SDK'sı, kullanıcının konumuyla ve rota üzerindeki koşullarla ilişkilendirilmiş işleyicilerin yanı sıra önemli zaman ve mesafe verilerini sağlar. Haritanın görünüm denetleyicisinde, uygulamanızın şu dinleyiciler için protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

Bu liste, gezinme etkinlikleri için kullanılabilen işleyici yöntemlerini gösterir:

Kodu inceleyin

Gerekli protokollere uygunluk beyanı

Gezinme yöntemlerini uygulamadan önce, görünüm denetleyicisinin protokolleri benimsemesi gerekir:

Swift

class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>

@son

Gezinme protokollerini benimsedikten sonra, işleyicileri görünüm denetleyicisine ayarlayın. Örneğin, viewDidLoad() yöntemine aşağıdaki kodu ekleyebilirsiniz.

Swift

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

Objective-C

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

Konum güncellemelerini alma veya durdurma

Kullanıcının ilerleme durumunu harita üzerinde göstermek için konum güncellemeleri gereklidir.

location örneği aşağıdaki özellikleri gösterir:

Konum mülkü Açıklama
rakım Mevcut rakım.
coordinate.latitude Yola eklenen mevcut enlem koordinatı.
coordinate.longitude Yola eklenen mevcut boylam koordinatı.
kurs Derece cinsinden mevcut yön.
hız Şu anki hız.
timestamp Geçerli okumanın tarihi/saati.

Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation numaralı telefonu arayın ve didUpdateLocation etkinliğini işlemek için GMSRoadSnappedLocationProviderListener öğesini kullanın.

Aşağıdaki örnekte startUpdatingLocation çağrısı gösterilmektedir:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatedLocation];

Aşağıdaki kod, didUpdateLocation etkinliğini işleyen bir GMSRoadSnappedLocationProviderListener oluşturur.

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); }

Uygulama arka plandayken konum güncellemelerini almak için allowsBackgroundLocationUpdates ayarını true olarak yapın:

Swift

mapView.roadSnappedLocationProvider.allowsbackgroundLocationUpdates = true

Objective-C

_mapView.roadSnappedLocationProvider.allowsbackgroundLocationUpdates = EVET;

Varış etkinliklerini algılama

Uygulamanız bir hedefe ulaşıldığını algılamak için didArriveAtWaypoint etkinliğini kullanır. continueToNextDestination() yöntemini çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirip bir sonraki ara noktaya geçebilirsiniz. Uygulamanız, continueToNextDestination() çağırdıktan sonra rehberliği yeniden etkinleştirmelidir.

Uygulama continueToNextDestination çağrısından sonra, gezgin artık önceki hedefle ilgili verilere sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek isterseniz continueToNextDestination() işlevini çağırmadan önce bu bilgiyi kılavuzdan almanız gerekir.

Aşağıdaki kod örneğinde, didArriveAtWaypoint etkinliğini işlemek için bir yöntem gösterilmektedir:

Swift

func navigator(_ navigator: GMSNavigator, didReachAt referans noktası: GMS NavigationWaypoint) { print("Varışınız: (waypoint.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidanceActive = true }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didReachAtWaypoint:(GMS NavigationWaypoint *)waypoint { NSLog(@"Varış noktanız: %@", ara nokta.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }

Rota değişikliği güncellemeleri alınıyor

Rota her değiştiğinde bildirim almak için navigatorDidChangeRoute etkinliğini işlemek üzere bir yöntem oluşturun. GMSNavigator öğesinin routeLegs ve currentRouteLeg özelliklerini kullanarak yeni rotaya erişebilirsiniz.

Swift

func navigatorDidChangeRoute(_ navigator: GMSNavigator) { Print("Güzergah değişti.") }

Objective-C

  • (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"Yol değişti."); }

Hedef güncellemelerine ulaşma süresi

Hedef güncellemelerine sürekli ulaşmak için didUpdateRemainingTime etkinliğini işleyecek bir yöntem oluşturun. time parametresi, bir sonraki hedefe ulaşılana kadar geçen tahmini süreyi saniye cinsinden belirtir.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time: TimeInterval) { Print("Sonraki hedefe kalan süre: (zaman)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Sonraki hedefe kalan süre: %f", time); }

Bir sonraki hedefle ilgili tahmini süredeki minimum değişikliği GMSNavigator üzerinde timeUpdateThreshold özelliğini ayarlayın. Değer, saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler bir saniyelik varsayılan değer kullanır.

Swift

gezgin?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Hedefe mesafe güncellemeleri alınıyor

Hedef güncellemelerine sürekli mesafe almak için didUpdateRemainingDistance etkinliğini işleyen bir yöntem oluşturun. distance parametresi, bir sonraki hedefe giden tahmini mesafeyi metre cinsinden belirtir.

Swift

func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance mesafe: CLLocationDistance) { allow miles = range * 0.00062137 press("Sonraki hedefe uzaklık: (mil) mil.") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateRemainingDistance:(CLLocationDistance)mesafe { çift mil = distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Sonraki hedefe uzaklık: %.2f.", miles]); }

Bir sonraki hedefe tahmini mesafedeki minimum değişikliği ayarlamak için GMSNavigator üzerinde distanceUpdateThreshold özelliğini ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmazsa hizmetler bir metrelik varsayılan değer kullanır.

Swift

gezgin?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Trafik güncellemeleri alınıyor

Kalan rotanın trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory etkinliğini işleyecek bir yöntem oluşturun. delayCategoryToNextDestination işlevine yapılan bir çağrı, 0 ile 3 arasında bir değer sağlayan GMSNavigationDelayCategory sonucunu döndürür. Kategoride yapılan güncellemeler, uygulama kullanıcısının mevcut konumuna bağlıdır. Trafik verileri kullanılamıyorsa GMSNavigationDelayCategory 0 değerini döndürür. 1-3 arasındaki sayılar, hafiften yoğuna doğru akışın arttığını gösterir.

Swift

func navigator(_ navigator: GMSNavigator, didUpdate delayCategory: GMS NavigationDelayCategory) { Print("Sonraki hedefe giden trafik akışı: (delayCategory)") }

Objective-C

  • (void)navigator:(GMSNavigator *)navigator didUpdateDelayCategory:(GMS NavigationDelayCategory)delayCategory { NSLog(@"Sonraki hedefe giden trafik akışı: %ld", (long)delayCategory); }

GMSNavigationDelayCategory özelliği aşağıdaki gecikme düzeylerini sunar:

Gecikme kategorisi Açıklama
GMSNavigationDelayCategoryNoData 0 - Kullanılamıyor, trafik için veri yok veya :
rotayı görebilirsiniz.
GMSNavigationDelayCategoryHeavy 1 - Ağır.
GMSNavigationDelayCategoryMedium 2 - Orta.
GMSNavigationDelayCategoryLight 3 - Hafif.

Hız güncellemeleri alınıyor

Bir sürücü hız sınırını aştığında güncelleme almak için didUpdateSpeedingPercentage etkinliğini işleme alacak bir yöntem oluşturun.

Swift

// Hız etkinliklerini işleyecek dinleyici. func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentagePercentage%AboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) limitin üzerinde.") }

Objective-C

// Hız etkinliklerini işleyecek işleyici. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Hız sınırın %f üzerindedir.", percentageAboveLimit); }

Önerilen ışıklandırma modunu değiştirme

Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeleri almak için didChangeSuggestedLightingMode etkinliğini işleyecek bir yöntem oluşturun.

Swift

// Aydınlatma modunda önerilen değişiklikler için bir işleyici tanımlayın. func navigator(_ navigator: GMSNavigator, didChangeSuggestedLightingMode spreadsheetMode: GMS NavigationLightingMode) { Print("Önerilen ışık modu değiştirildi: (String(açıklama: aydınlatmaMode))")

// Önerilen değişikliği yapın. mapView.lightingMode = lightMode }

Objective-C

// Işıklandırma modunda yapılması önerilen değişiklikler için bir işleyici tanımlayın. -(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode: (GMS NavigationLightingMode)lightingMode { NSLog(@"Önerilen ışık modu değişti: %ld", (long)lightingMode);

// Önerilen değişikliği yapın. _mapView.lightingMode = lightingMode; }