With HERE SDK developers can enable turn-by-turn route navigation that takes live traffic information into account. NavigationManager.setTrafficAvoidanceMode()
can be used to set the way in which traffic should be handled during navigation.
Three modes are available for traffic avoidance, and they are defined by the following
NavigationManager.TrafficAvoidanceMode
enumerations. The default mode is
DISABLE
.
-
DYNAMIC
- Performs traffic-aware rerouting without user input. In this mode the guidance engine performs periodic route calculations while the device is online. A route calculation is a server request where the server finds the most optimal route by avoiding traffic congestions and calculating speed limits. If the calculated route is different from the current route, the navigation manager automatically switches to the new route. It also triggers NavigationManager.NavigationManagerEventListener.onRouteUpdated(Route)
callback method.
Note: You can set the frequency of the route request by using NavigationManager.setRouteRequestInterval()
.
-
MANUAL
- Provides the traffic-aware rerouting callback NavigationManager.NavigationManagerEventListener.onRouteUpdated(Route)
. In this mode no rerouting occurs unless the NavigationManager
is explicitly set with the new Route
. For more information, see the next section.
-
DISABLE
- Disables traffic-based rerouting.
Manual Traffic-Based Rerouting
If the device is online and NavigationManager.TrafficAvoidanceMode.MANUAL
is selected, the guidance engine periodically performs route recalculations while the device is online. You can listen for this recalculation event by implementing onTrafficRerouteBegin(TrafficNotification)
method in TrafficRerouteListener
.
Route recalculation is a server request where the server finds the most optimal route by avoiding live traffic congestions and calculating road speed limits. If the calculated route is different from the current route, the new route is returned through NavigationManager.TrafficRerouteListener.onTrafficRerouted(Route)
callback method. A voice note is also played by the guidance engine. You can then set the new Route
to the NavigationManager
manually.
TrafficWarner Class
TrafficWarner
class is responsible for enabling and handling traffic notifications. Traffic notifications occur if there is a traffic event on the current route and the user's current position is near the event.
To retrieve an instance of the TrafficWarner
object, call NavigationManager.getTrafficWarner()
. You then can call TrafficWarner.init()
to initialize and start the TrafficWarner
.
One or more of the following methods can be used to operate traffic warner or to retrieve further information about traffic notifications:
-
isAhead(TrafficNotification)
- determines whether or not a traffic notification is ahead of the last callback position -
isOnRoute(Route, TrafficNotification)
- determines if a traffic notification is on a given route -
isValid()
- determines if the traffic warner is valid -
stop()
- stops the traffic warner -
start()
- starts the traffic warner
Note: The navigation manager must be in the Running state for the traffic warner to work correctly.
To listen for traffic notifications, a listener must be added via TrafficWarner.addListener()
.
TrafficNotification and TrafficNotificationInfo Classes
TrafficWarner.Listener
provides a callback that returns a TrafficNotification
object that is relevant to the current navigation session. This TrafficNotification
contains a list of TrafficNotificationInfo
instances associated with the traffic notification retrievable through TrafficNotification.getInfoList()
.
TrafficNotificationInfo
class encapsulates the details of a traffic notification. TrafficNotificationInfo.Type
defines the type of traffic notification with regards to the current route.
The following methods can be used to retrieve details about a TrafficNotificationInfo
instance:
-
getType()
- gets the type of traffic notification info -
getDistanceInMeters()
- gets the distance from the last callback position to the traffic notification
Finding Alternative Routes with Traffic Avoidance Mode Enabled
It is called when the navigation manager has found alternative routes for current one during navigation. The following is an example of an AlternativeRoutesListener.onAlternativeRoutesUpdated()
.
public void onAlternativeRoutesUpdated(final List<Route> alternativeRoutes) {
// remove old alternative routes from the map
map.removeMapObjects(currentAlternativeRoutes);
// enumerate all available alternative routes
for (Route route : alternativeRoutes) {
// create new map route object
MapRoute mapRoute = new MapRoute(route);
// set random color for the map route
mapRoute.setColor(Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
// update internal storage
currentAlternativeRoutes.add(mapRoute);
// add alternative route to the map
map.addMapObject(mapRoute);
}
}