Launch NavigationView
A complete turn-by-turn experience using the default NavigationLauncher
This example shows how to launch Navigation using NavigationLauncher
-
How to fetch a route using
NBNavigation.fetchRoute
with origin and destination -
How to config
NavLauncherConfig
and launch Navigation usingNavigationLauncher
with the given route

For all code examples, refer to Navigation Code Examples
activity_main.xml view source
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical"
6 android:padding="10dp">
7
8 <LinearLayout
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content">
11 <Button
12 android:id="@+id/fetchRoute"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="@string/fetch_route"/>
16
17 <Button
18 android:id="@+id/startNav"
19 android:layout_width="wrap_content"
20 android:layout_height="wrap_content"
21 android:layout_marginLeft="15dp"
22 android:text="@string/start_navigation"/>
23 </LinearLayout>
24
25 <TextView
26 android:id="@+id/routeGeometry"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:layout_marginTop="10dp"/>
30
31 <ProgressBar
32 android:id="@+id/progress"
33 android:visibility="gone"
34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content"
36 android:layout_gravity="center"/>
37
38</LinearLayout>
NavigationActivity view source
1package ai.nextbillion.navigation.demo.activity;
2
3import android.os.Bundle;
4import android.view.View;
5import android.widget.Button;
6import android.widget.ProgressBar;
7import android.widget.TextView;
8
9import ai.nextbillion.kits.directions.models.DirectionsResponse;
10import ai.nextbillion.kits.directions.models.DirectionsRoute;
11import ai.nextbillion.kits.geojson.Point;
12import ai.nextbillion.maps.location.modes.RenderMode;
13import ai.nextbillion.navigation.demo.R;
14import ai.nextbillion.navigation.ui.NBNavigation;
15import ai.nextbillion.navigation.ui.NavLauncherConfig;
16import ai.nextbillion.navigation.ui.NavigationLauncher;
17import androidx.annotation.NonNull;
18import androidx.appcompat.app.AppCompatActivity;
19import retrofit2.Call;
20import retrofit2.Callback;
21import retrofit2.Response;
22
23public class NavigationActivity extends AppCompatActivity implements View.OnClickListener {
24
25 private Button fetchRoute;
26 private Button startNav;
27 private TextView routeGeometry;
28 private DirectionsRoute directionsRoute;
29 private ProgressBar progress;
30 @Override
31 protected void onCreate(Bundle savedInstanceState) {
32 super.onCreate(savedInstanceState);
33 setContentView(R.layout.activity_main);
34 fetchRoute = findViewById(R.id.fetchRoute);
35 startNav = findViewById(R.id.startNav);
36 routeGeometry = findViewById(R.id.routeGeometry);
37 progress = findViewById(R.id.progress);
38 fetchRoute.setOnClickListener(this);
39 startNav.setOnClickListener(this);
40 startNav.setEnabled(false);
41
42 }
43
44 @Override
45 public void onClick(View view) {
46 if (view.getId() == R.id.fetchRoute) {
47 progress.setVisibility(View.VISIBLE);
48 Point origin = Point.fromLngLat(103.75986708439264, 1.312533169133601);
49 Point destination = Point.fromLngLat(103.77982271935586, 1.310473772283314);
50
51 NBNavigation.fetchRoute(origin, destination, new Callback<DirectionsResponse>() {
52 @Override
53 public void onResponse(@NonNull Call<DirectionsResponse> call, @NonNull Response<DirectionsResponse> response) {
54 progress.setVisibility(View.GONE);
55 //start navigation with the route we just fetched.
56 if (response.body() != null && !response.body().routes().isEmpty()) {
57 directionsRoute = response.body().routes().get(0);
58 routeGeometry.setText(String.format("Route Geometry: %s", directionsRoute.geometry()));
59 startNav.setEnabled(true);
60 }
61 }
62
63 @Override
64 public void onFailure(@NonNull Call<DirectionsResponse> call, @NonNull Throwable t) {
65 progress.setVisibility(View.GONE);
66 }
67 });
68 } else if (view.getId() == R.id.startNav) {
69 NavLauncherConfig.Builder configBuilder = NavLauncherConfig.builder(directionsRoute);
70 configBuilder.locationLayerRenderMode(RenderMode.GPS);
71 configBuilder.shouldSimulateRoute(true);
72 NavigationLauncher.startNavigation(NavigationActivity.this, configBuilder.build());
73 }
74 }
75}
Code Highlights
The example code represents a NavigationActivity class that allows users to fetch a route and start navigation using the NavigationLauncher class provided by the navigation SDK.
Code Explanation
The code example defines a layout file activity_main.xml
that contains a vertical LinearLayout
with two Button views (fetchRoute
and startNav
), a TextView
(routeGeometry
), and a ProgressBar
(progress
).
The associated Java class NavigationActivity
extends AppCompatActivity
and implements the OnClickListener
interface. In the onCreate
method, the layout elements are initialized and click listeners are set for the buttons.
When the fetchRoute
button is clicked, a network request is made using the NBNavigation
class to fetch a route between two geographic points (origin and destination). The response is received asynchronously in the onResponse
callback. If the response is successful and contains at least one route, the first route is stored in the directionsRoute
variable, and its geometry is displayed in the routeGeometry
text view. The startNav
button is enabled to allow navigation to be started.
When the startNav
button is clicked, a NavLauncherConfig
is created with the stored directionsRoute
and some configuration options. The navigation is then started using the NavigationLauncher.startNavigation
method.
Code summary
-
Fetch a route
- Using the
NBNavigation.fetchRoute
method to retrieve the directions response for the given origin and destination points. If the response is successful and it will contain at least one route
- Using the
-
Start navigation
NavLauncherConfig
object is created with the previously fetched route and additional configuration options such as location layer render mode and route simulation. TheNavigationLauncher.startNavigation
method is called to start the navigation activity with the provided configuration.