Navigasyon etkinliklerini dinleme

Uygulamanızın, kullanıcı bir rota üzerinde gezinirken değişen çeşitli etkinlikleri dinleyip yanıtlamasını sağlamak için bu rehberi kullanın. Bu kılavuzda, rota tanımlama değil, yalnızca rota üzerindeki etkinliklere yanıt verme ele alınmaktadır.

Genel Bakış

iOS için Navigasyon SDK'sı, kullanıcının konumu ve rotadaki koşullarla ilişkili dinleyiciler, önemli zaman ve mesafe verileri sağlar. Uygulamanızın, haritanın görüntüleme denetleyicisinde şu dinleyicilerin protokollerini benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

Bu listede, gezinme etkinlikleri için kullanılabilen dinleyici yöntemleri gösterilmektedir:

Kodu görme

Gerekli protokollere uygunluğu beyan etme

Görüntüleme denetleyicisi, gezinme yöntemlerini uygulamadan önce aşağıdaki protokolleri benimsemelidir:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

Gezinme protokollerini benimsedikten sonra dinleyicileri görüntü kontrol cihazına 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 haritada ilerleme durumunu göstermek için konum güncellemeleri gerekir.

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

Konum mülkü Açıklama
rakım Mevcut rakım.
coordinate.latitude Yola göre yakalanan mevcut enlem koordinatı.
coordinate.longitude Yolun şu anki boylam koordinatı.
kurs Derece cinsinden mevcut yön.
hız Mevcut hız.
timestamp Mevcut okumanın tarihi/saati.

Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation işlevini çağırın ve didUpdateLocation etkinliğini işlemek için GMSRoadSnappedLocationProviderListener işlevini kullanın.

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

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatingLocation];

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üncellemeleri almak için allowsBackgroundLocationUpdates değerini true olarak ayarlayın:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Varış etkinliklerini algılama

Uygulamanız, bir hedefe ne zaman ulaşıldığını algılamak için didArriveAtWaypoint etkinliğini kullanır. continueToNextDestination()'yi çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirebilir ve sonraki yol noktasına geçebilirsiniz. Uygulamanız, continueToNextDestination() çağrısını sonrasında rehberliği yeniden etkinleştirmelidir.

Uygulama continueToNextDestination'ü aradıktan sonra, navigasyon cihazında önceki hedefle ilgili veriler artık bulunmaz. Bir rota adımı hakkındaki bilgileri analiz etmek istiyorsanız continueToNextDestination()'ü aramadan önce bu bilgileri navigasyon cihazından almanız gerekir.

Aşağıdaki kod örneğinde, didArriveAtWaypoint etkinliğini işleme yöntemi gösterilmektedir:

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

Rota değişikliği güncellemeleri alma

Rota her değiştirildiğinde bildirim almak için navigatorDidChangeRoute etkinliğini işleyen bir yöntem oluşturun. GMSNavigator öğesinin routeLegs ve currentRouteLeg özelliklerini kullanarak yeni yola erişebilirsiniz.

Swift

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

Objective-C

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

Hedefe varış süresi güncellemeleri alma

Hedefe varış süresiyle ilgili sürekli güncellemeler almak için didUpdateRemainingTime etkinliğini işleyen bir yöntem oluşturun. time parametresi, bir sonraki hedefe ulaşılana kadar geçen tahmini süreyi saniye cinsinden sağlar.

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

Bir sonraki hedefe tahmini süredeki minimum değişikliği ayarlamak için timeUpdateThreshold mülkünü GMSNavigator olarak ayarlayın. Değer saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler bir saniyelik varsayılan değeri kullanır.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Hedefe olan mesafeyle ilgili güncellemeler alma

Hedefe olan mesafeyle ilgili sürekli güncellemeler almak için didUpdateRemainingDistance etkinliğini işleyen bir yöntem oluşturun. distance parametresi, bir sonraki hedefe olan tahmini mesafeyi (metre cinsinden) sağlar.

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

Sonraki hedefe olan tahmini mesafedeki minimum değişikliği ayarlamak için distanceUpdateThreshold mülkünü GMSNavigator olarak ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmazsa hizmetler bir metrelik varsayılan değeri kullanır.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Trafik güncellemeleri alma

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

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 mülkü aşağıdaki gecikme düzeylerini gösterir:

Gecikme kategorisi Açıklama
GMSNavigationDelayCategoryNoData 0: Kullanılamıyor, trafik için veri yok veya :
rota.
GMSNavigationDelayCategoryHeavy 1 - Ağır.
GMSNavigationDelayCategoryMedium 2 - Orta.
GMSNavigationDelayCategoryLight 3 - Işık.

Hız sınırı ihlali güncellemeleri alma

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

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

Önerilen aydınlatma modunu değiştirme

Aydınlatmadaki tahmini değişikliklerle ilgili güncellemeler almak için didChangeSuggestedLightingMode etkinliğini işleyen bir yöntem oluşturun.

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