Navigasyon etkinliklerini dinleme

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

Genel bakış

iOS için Navigasyon SDK'sı, kullanıcının konumuyla ilişkilendirilmiş dinleyiciler ve rota üzerindeki koşulların yanı sıra önemli zaman ve mesafe verilerini sunar. Haritanın görüntüleme denetleyicisinde uygulamanızın şu dinleyiciler için protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

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

Kodu göster

Gerekli protokollere uygunluk bildiriliyor

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

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

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

Swift

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

Objective-C

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

Konum güncellemeleri alma veya durdurma

Kullanıcının ilerlemesini haritada göstermek için konum güncellemeleri gereklidir.

location örneği aşağıdaki özellikleri sunar:

Konum özelliği Açıklama
rakım Mevcut rakım.
coordinate.latitude Yol kırpılmış mevcut enlem koordinatı.
coordinate.longitude Yola eklenmiş mevcut boylam koordinatı.
kurs Derece cinsinden mevcut değer.
hız Mevcut hız.
timestamp Geçerli okumanın tarihi/saati.

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

Aşağıdaki örnekte startUpdatingLocation işlevinin çağrılması 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 öğesini doğru değerine ayarlayın:

Swift

mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true

Objective-C

 _mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;

Varış etkinliklerini algılama

Uygulamanız bir hedefe ulaşıldığında bunu algılamak için didArriveAtWaypoint etkinliğini kullanır. continueToNextDestination() numaralı telefonu arayıp kılavuzu yeniden etkinleştirerek kılavuzu devam ettirebilir ve bir sonraki ara noktaya geçebilirsiniz. continueToNextDestination() çağrıldıktan sonra uygulamanızın kılavuzu yeniden etkinleştirmesi gerekir.

Uygulama continueToNextDestination çağırdıktan sonra, gezgin artık önceki hedefle ilgili verilere sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination() çağrısından önce bunu navigasyondan 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, 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 alınıyor

Rota değiştirildiğinde bildirim almak için navigatorDidChangeRoute etkinliğini işleyecek bir yöntem oluşturun. GMSNavigator ürününün routeLegs ve currentRouteLeg özelliklerini kullanarak yeni rotaya erişebilirsiniz.

Swift

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

Objective-C

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

Hedef güncellemelerinin alınacağı süre

Hedef güncellemelerine kadar sürekli olarak süre almak istiyorsanız 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 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 giden tahmini süredeki minimum değişimi ayarlamak için GMSNavigator alanında timeUpdateThreshold özelliğini 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 mesafe güncellemeleri alınıyor

Hedef güncellemelerine sürekli olarak uzaklık bilgisi almak için didUpdateRemainingDistance etkinliğini işleyecek bir yöntem oluşturun. distance parametresi, bir sonraki hedefe ulaşılabilecek 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]); }

Bir sonraki hedefe olan tahmini mesafedeki minimum değişikliği belirlemek için GMSNavigator tarihinde distanceUpdateThreshold özelliğini 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 alınıyor

Kalan rota için trafik akışıyla ilgili sürekli güncellemeleri almak amacıyla didUpdateDelayCategory etkinliğini işlemek üzere bir yöntem oluşturun. delayCategoryToNextDestination çağrısı, 0 ile 3 arasında bir değer sağlayan GMSNavigationDelayCategory değerini döndürür. Kategoride yapılan güncellemeler, uygulama kullanıcının mevcut konumuna dayanır. Trafik verileri mevcut değilse GMSNavigationDelayCategory, 0 değerini döndürür. 1'den 3'e kadar olan sayılar, hafiften yoğuna 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 özelliği aşağıdaki gecikme düzeylerini sunar:

Gecikme kategorisi Açıklama
GMSNavigationDelayCategoryNoData 0 - Kullanılamıyor, trafik için veri yok veya :
yol gösterir.
GMSNavigationDelayCategoryHeavy 1 - Şiddetli.
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şleyecek 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 ışık modu değiştiriliyor

Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeleri almak için didChangeSuggestedLightingMode etkinliğini işleyecek 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; }