Nghe sự kiện điều hướng

Hãy sử dụng hướng dẫn này để cho phép ứng dụng của bạn theo dõi và phản hồi nhiều sự kiện thay đổi khi người dùng di chuyển trong một tuyến đường. Hướng dẫn này không đề cập đến việc xác định một tuyến mà chỉ phản hồi các sự kiện trên một tuyến đường đó.

Tổng quan

SDK Điều hướng dành cho iOS cung cấp cho bạn các trình nghe liên quan đến vị trí của người dùng và các điều kiện trên tuyến đường cũng như dữ liệu quan trọng về thời gian và khoảng cách. Trên trình kiểm soát chế độ xem của bản đồ, ứng dụng của bạn cần áp dụng các giao thức cho các trình nghe này: GMSRoadSnappedLocationProviderListenerGMSNavigatorListener.

Danh sách này cho biết các phương thức của trình nghe có sẵn cho sự kiện điều hướng:

Xem mã

Khai báo sự tuân thủ các giao thức bắt buộc

Trước khi triển khai các phương thức điều hướng, bộ điều khiển chế độ xem phải sử dụng các giao thức:

Swift

lớp ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {

Objective-C

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

@end

Sau khi áp dụng các giao thức điều hướng, hãy đặt trình nghe thành bộ điều khiển chế độ xem. Ví dụ: bạn có thể thêm mã sau vào phương thức viewDidLoad().

Swift

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

Objective-C

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

Nhận hoặc dừng thông tin cập nhật vị trí

Cần có thông tin cập nhật vị trí để hiển thị tiến trình của người dùng trên bản đồ.

Thực thể location cho thấy các thuộc tính sau:

Thuộc tính vị trí Nội dung mô tả
độ cao Độ cao hiện tại.
coordinate.latitude Toạ độ theo vĩ độ hiện tại theo đường chụp.
coordinate.longitude Toạ độ kinh độ bị chụp đường hiện tại.
khoá học Góc hiện tại tính theo độ.
tốc độ Tốc độ hiện tại.
timestamp Ngày/giờ của chỉ số hiện tại.

Để liên tục nhận được thông tin cập nhật vị trí, hãy gọi mapView.roadSnappedLocationProvider.startUpdatingLocation và sử dụng GMSRoadSnappedLocationProviderListener để xử lý sự kiện didUpdateLocation.

Ví dụ sau đây cho thấy cách gọi startUpdatingLocation:

Swift

mapView.roadSnappedLocationProvider.startUpdatingLocation()

Objective-C

[_mapView.roadSnappedLocationProvider startUpdatesLocation];

Mã sau đây sẽ tạo một GMSRoadSnappedLocationProviderListener xử lý sự kiện didUpdateLocation.

Swift

Func locationProvider(_ locationProvider: GMSđườngSnappedLocationProvider, didUpdate location: CLLocation) { print("Location: (location.description)") }

Objective-C

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

Để nhận thông báo cập nhật vị trí khi ứng dụng chạy ở chế độ nền, hãy đặt allowsBackgroundLocationUpdates thành true:

Swift

mapView.roadSnappedLocationProvider.enabledBackgroundLocationUpdates = true

Objective-C

_mapView.roadSnappedLocationProvider.permissionBackgroundLocationUpdates = CÓ;

Phát hiện sự kiện đến

Ứng dụng của bạn sử dụng sự kiện didArriveAtWaypoint để phát hiện thời điểm người dùng đã đến một đích đến. Bạn có thể tiếp tục hướng dẫn và chuyển đến điểm tham chiếu tiếp theo bằng cách gọi continueToNextDestination(), sau đó bật lại hướng dẫn. Ứng dụng của bạn phải bật lại hướng dẫn sau khi gọi continueToNextDestination().

Sau khi ứng dụng gọi continueToNextDestination, trình điều hướng không còn dữ liệu về đích đến trước đó nữa. Nếu muốn phân tích thông tin về chân tuyến đường, bạn phải truy xuất chân này từ trình điều hướng trước khi gọi continueToNextDestination().

Mã ví dụ sau đây cho thấy một phương thức để xử lý sự kiện didArriveAtWaypoint:

Swift

Func navigator(_ navigator: GMSNavigator, DidTHEAt Waypoint: GMSNavigationwaypoint) { print("Bạn đã đến: (waypoint.title))") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuideActive = true }

Objective-C

  • (void)navigation:(GMSNavigator *)navigator didĐIAtwaypoint:(GMSNavigationwaypoint *)waypoint { NSLog(@"Bạn đã đến lúc: %@", Waypoint.title); [_mapView.navigation.navigator continueToNextDestination]; _mapView.navigator.GuideanceActive = YES; }

Nhận thông tin cập nhật về thay đổi tuyến đường

Để nhận thông báo bất cứ khi nào tuyến đường này thay đổi, hãy tạo một phương thức để xử lý sự kiện navigatorDidChangeRoute. Bạn có thể truy cập tuyến mới bằng cách sử dụng các thuộc tính routeLegscurrentRouteLeg của GMSNavigator.

Swift

Func navigatorDidChangeRoute(_ navigation: GMSNavigator) { print("Tuyến đường đã thay đổi.") }

Objective-C

  • (void)navigatorDidChangeRoute:(GMSNavigator *)navigation { NSLog(@"Tuyến đường đã thay đổi."); }

Đang nhận thông tin cập nhật về thời gian tới điểm đến

Để nhận được thời gian liên tục tới thông tin cập nhật đích đến, hãy tạo một phương thức để xử lý sự kiện didUpdateRemainingTime. Tham số time cung cấp thời gian ước tính (tính bằng giây) cho đến khi đến đích đến tiếp theo.

Swift

Func navigation(_ trình điều hướng: GMSNavigator, DidUpdateRemainingTime: TimeInterval) { print("Thời gian tới điểm đến tiếp theo: (time)") }

Objective-C

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

Để đặt mức thay đổi tối thiểu về thời gian ước tính cho điểm đến tiếp theo, hãy đặt thuộc tính timeUpdateThreshold trên GMSNavigator. Giá trị được chỉ định bằng giây. Nếu bạn không đặt thuộc tính này, các dịch vụ sẽ sử dụng giá trị mặc định là một giây.

Swift

navigation?.timeUpdatethreshold = 10

Objective-C

navigator.timeUpdateThreshold = 10;

Đang nhận thông tin cập nhật về khoảng cách đến điểm đến

Để nhận được khoảng cách liên tục đến thông tin cập nhật đích đến, hãy tạo một phương thức để xử lý sự kiện didUpdateRemainingDistance. Tham số distance cung cấp khoảng cách ước tính (tính bằng mét) đến đích đến tiếp theo.

Swift

Func navigation(_ trình điều hướng: GMSNavigator, DidUpdateRemainingDistance: CLLocationDistance) { cho phép dặm = khoảng cách * 0,00062137 print("Khoảng cách tới điểm đến tiếp theo: (dặm) dặm.") }

Objective-C

  • (void)navigation:(GMSNavigatorNavigator *)Navigationnavigation đi

Để đặt mức thay đổi tối thiểu về khoảng cách ước tính tới điểm đến tiếp theo, hãy đặt thuộc tính distanceUpdateThreshold trên GMSNavigator (giá trị được chỉ định bằng mét). Nếu bạn không đặt thuộc tính này, các dịch vụ sẽ sử dụng giá trị mặc định là một mét.

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

Đang nhận thông tin cập nhật về giao thông

Để nhận thông tin cập nhật liên tục về luồng lưu lượng truy cập cho tuyến đường còn lại, hãy tạo một phương thức để xử lý sự kiện didUpdateDelayCategory. Lệnh gọi đến delayCategoryToNextDestination trả về GMSNavigationDelayCategory cung cấp giá trị từ 0 đến 3. Các bản cập nhật cho danh mục dựa trên vị trí hiện tại của người dùng ứng dụng. Nếu không có dữ liệu lưu lượng truy cập, GMSNavigationDelayCategory sẽ trả về 0. Các con số từ 1 đến 3 cho biết lưu lượng truy cập tăng dần từ nhẹ đến nặng.

Swift

Func navigator(_ navigation: GMSNavigator, DidUpdate delayCategory: GMSNavigationDelayCategory) { print("Luồng giao thông đến điểm đến tiếp theo: (delayCategory)") }

Objective-C

  • (void)navigation:(GMSNavigator *)navigationnavigation didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory { NSLog(@"Luồng lưu lượng đến điểm đến tiếp theo: %ld", (long)delayCategory); }

Thuộc tính GMSNavigationDelayCategory cho thấy các mức độ trễ sau:

Danh mục độ trễ Nội dung mô tả
GMSNavigationDelayCategoryNoData 0 - Không có, không có dữ liệu cho giao thông hoặc :
tuyến đường.
GMSNavigationDelayCategoryHeavy 1 – Lớn.
GMSNavigationDelayCategoryMedium 2 – Trung bình.
GMSNavigationDelayCategoryLight 3 – Sáng.

Đang nhận thông tin cập nhật về tốc độ

Để nhận thông tin cập nhật khi người lái xe vượt quá giới hạn tốc độ, hãy tạo một phương thức để xử lý sự kiện didUpdateSpeedingPercentage.

Swift

// Trình nghe để xử lý các sự kiện tăng tốc. navigation vui }

Objective-C

// Trình nghe để xử lý các sự kiện tăng tốc. – (void)navigator:(GMSNavigatorNavigator *)navigator DidUpdateSpeedingPercentage:(CGFloat)percentageTopLimit { NSLog(@"Speed is %f Sử dụng phần trăm vượt quá giới hạn.", tỷ Giá phần trăm; giới hạn); }

Thay đổi chế độ chiếu sáng được đề xuất

Để nhận thông tin cập nhật về các thay đổi ước tính về ánh sáng, hãy tạo một phương thức để xử lý sự kiện didChangeSuggestedLightingMode.

Swift

// Xác định trình nghe cho các thay đổi được đề xuất đối với chế độ chiếu sáng. Func navigation(_ navigation: GMSNavigator, DidChangeSuggestedLightingMode LightMode: GMSNavigationLightingMode) { print("Gợi ý chế độ ánh sáng đã thay đổi: (String(describing: lightMode))")

// Thực hiện thay đổi được đề xuất. mapView.lightingMode = lightMode }

Objective-C

// Xác định trình nghe cho các thay đổi được đề xuất đối với chế độ chiếu sáng. -(void)navigator:(GMSNavigator *)Navgator DidChangeSuggestedLightingMode: (GMSNavigationLightingMode)lightingMode { NSLog(@"Gợi ý chế độ chiếu sáng đã thay đổi: %ld", (long)lightingMode);

// Thực hiện thay đổi được đề xuất. _mapView.lightingMode = sángMode; }