Navigasyon etkinliklerini dinleme

Uygulamanızın, kullanıcı bir rota boyunca ilerlerken 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 konusu ele alınmamaktadır. Yalnızca rota üzerindeki etkinliklere yanıt verme konusu ele alınmaktadır.

Genel Bakış

iOS için Navigasyon SDK'sı, kullanıcının konumu ve rota boyunca koşullarla ilgili dinleyiciler ile önemli zaman ve mesafe verileri sağlar. Haritanın görünüm denetleyicisinde uygulamanızın şu dinleyiciler için protokolleri benimsemesi gerekir: GMSRoadSnappedLocationProviderListener ve GMSNavigatorListener.

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

Kodu göster

Gerekli protokollere uygunluğu beyan etme

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

Swift

class ViewController:
  UIViewController,
  GMSNavigatorListener,
  GMSRoadSnappedLocationProviderListener
{
}

Objective-C

@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@end

Gezinme protokollerini uyguladıktan sonra dinleyicileri 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 haritadaki ilerleme durumunu göstermek için konum güncellemeleri gereklidir.

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

Konum özelliği Açıklama
altitude Mevcut rakım.
coordinate.latitude Yola sabitlenmiş mevcut enlem koordinatı.
coordinate.longitude Yola sabitlenmiş mevcut boylam koordinatı.
kurs Derece cinsinden mevcut yön.
hız Şu anki hız.
timestamp Mevcut ölçümün tarihi/saati.

Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation yöntemini çağırın ve didUpdateLocation etkinliğini işlemek için GMSRoadSnappedLocationProviderListener yöntemini 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ış etkinlikleri algılanıyor

Uygulamanız, bir hedefe ulaşıldığını algılamak için didArriveAtWaypoint etkinliğini kullanıyor. continueToNextDestinationWithCompletion() yöntemini çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirebilir ve bir sonraki ara noktaya ilerleyebilirsiniz. Uygulamanız, continueToNextDestinationWithCompletion() çağrısından sonra rehberliği yeniden etkinleştirmelidir.

Uygulama continueToNextDestinationWithCompletion yöntemini çağırdıktan sonra gezinme aracında önceki hedefle ilgili veri kalmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestinationWithCompletion() yöntemini çağırmadan ö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?.continueToNextDestinationWithCompletion { _, _ in }
  mapView.navigator?.isGuidanceActive = true
}

Objective-C

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

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

Rota her değiştiğinde bildirim almak için navigatorDidChangeRoute etkinliğini işleyecek bir yöntem oluşturun. GMSNavigator öğesinin 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.");
}

Varış süresi güncellemelerini alma

Varış noktasına kalan süreyle ilgili sürekli güncellemeler almak için didUpdateRemainingTime etkinliğini işleyecek bir yöntem oluşturun. time parametresi, bir sonraki hedefe ulaşılana kadar geçecek 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 varış noktasına tahmini varış süresindeki minimum değişikliği ayarlamak için GMSNavigator üzerinde timeUpdateThreshold özelliğini ayarlayın. Değer, saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler varsayılan olarak bir saniye değerini kullanır.

Swift

navigator?.timeUpdateThreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Hedefe olan mesafeyle ilgili güncellemeleri alma

Hedefe olan mesafeyle ilgili sürekli güncellemeler almak için didUpdateRemainingDistance etkinliğini işleyecek 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]);
}

Bir sonraki hedefe olan 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 varsayılan olarak bir metre değerini kullanır.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Trafik güncellemeleri alma

Kalan rotadaki trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory etkinliğini işleyecek 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. 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 yoğuna 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 gösterir:

Gecikme kategorisi Açıklama
GMSNavigationDelayCategoryNoData 0 - Kullanılamıyor, trafik verisi yok veya :
gösterilir.
GMSNavigationDelayCategoryHeavy 1 - Yoğun.
GMSNavigationDelayCategoryMedium 2 - Orta.
GMSNavigationDelayCategoryLight 3 - Açık.

Hız sınırını aşma 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ş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 ışıklandırma modu değiştiriliyor

GMSNavigator, günün saatine ve cihazın konumuna göre önerilen aydınlatma modunu hesaplar ve didChangeSuggestedLightingMode dinleyici yöntemini yalnızca önerilen mod değiştiğinde (ör. gün doğumunda veya gün batımında) çağırır. Kullanıcı uygulamanızı başlattığında haritanın uygun açık modla açılması için başlatma sırasında navigasyon cihazının suggestedLightingMode değerini mapView.lightingMode olarak ayarlayın ve sonraki değişiklikleri işlemek için didChangeSuggestedLightingMode değerini uygulayın.

Aşağıdaki örnekte, ilk aydınlatma modunun nasıl ayarlanacağı ve önerilen aydınlatma modu değişikliklerinin nasıl dinleneceği gösterilmektedir:

Swift

// Set the initial lighting mode on launch or setup.
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal

// 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

// Set the initial lighting mode on launch or setup.
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;

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

Otomatik ve manuel ışık modu yapılandırması hakkında daha fazla bilgi için Normal ve zayıf ışık modlarını yapılandırma başlıklı makaleyi inceleyin.