Get Started
This section is designed to help developers quickly and easily get up and running with the Navigation SDK. It covers the prerequisites and requirements for using the SDK, as well as detailed installation instructions and information on Maven dependencies. By following the steps outlined in this section, developers can quickly set up the Navigation SDK and start building engaging navigation experiences for their users. Additionally, it includes a Quickstart guide to creating a simple navigation app using the SDK, allowing developers to quickly see the Navigation SDK in action and get a feel for its capabilities.
Prerequisites and requirements for using the SDK
Our Android Navigation SDK require the following prerequisites:
-
Access Key: if you don’t have your Access Key yet, don’t hesitate to contact us
-
IDE (Android Studio): to build and develop the Android application
- There are no restrictions on IDE version, but we recommend developers to use Arctic Fox | 2020.3.1 and above.
-
Navigation SDK’s Android SDK levels
-
minSdkVersion 17
-
targetSdkVersion 29
-
compileSdkVersion 29
-
Play service location should be smaller than or equal to version 20.0.0(due to breaking changes: some Classes are now interfaces instead of classes, introduced on October 13, 2022, v21.0.0) com.google.android.gms:play-services-location:20.0.0
-
Installation instructions
The section explains how to install the SDK by adding the necessary dependencies to your project. It provides instructions on adding the maven dependencies of SDK to your app's build.gradle file.
Maven Dependencies
In your app-level build.gradle file, add the Nextbillion.ai dependency for the Navigation SDK for Android.
1dependencies {
2 def version = "1.0.6"
3 implementation “ai.nextbillion:nb-navigation-android:$version”
4}
This code block adds the Nextbillion.ai Navigation SDK as a dependency to your Android app. This allows your app to use the functionality provided by the SDK. The SDK version used is "0.2.0" stored in a variable version. The ‘dependencies’ block is used to specify the libraries and frameworks your app depends on. The ‘implementation’ keyword is used to declare a dependency on the Nextbillion Navigation SDK, the string 'ai.nextbillion:nb-navigation-android:$version' specifying the group, name, and version of the library(Navigation SDK). The "implementation" configuration indicates that this dependency is needed at runtime and it should be packaged with the APK.
Note: Since the Gradle file has been edited. Android Studio will ask you whether to sync the files or not. Select Yes, and sync the Gradle files for successful installation of Android Navigation SDK.
Initialization
The Navigation SDK is dependent on the Maps SDK, before we start using any functionalities from both SDKs, we need to initialize the Maps SDK first.
Initializing means passing your Access Key to the singleton method of the class Nextbillion, A common way to initialize the SDK is to put the following code in an Application’s onCreate() callback. Otherwise, please make sure you have called the code below before using any SDK functionalities.
1Nextbillion.getInstance(getApplicationContext(), "your access key");
If your project doesn’t have an Application class, please make sure that you have called the code above before you instantiate a MapView or inflate any layout that contains a MapView, for example, call it before **setContentView(R.layout.your_layout). **
Add Permissions
To use all functions of Navigation SDK, you need to declare the required permissions in the AndroidManifest.xml file
1<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Quickstart guide to creating a simple navigation app using the SDK
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 package ai.nextbillion.navigation.demo.activity;
1import android.os.Bundle;
2import android.view.View;
3import android.widget.Button;
4import android.widget.ProgressBar;
5import android.widget.TextView;
6
7import ai.nextbillion.kits.directions.models.DirectionsResponse;
8import ai.nextbillion.kits.directions.models.DirectionsRoute;
9import ai.nextbillion.kits.geojson.Point;
10import ai.nextbillion.maps.location.modes.RenderMode;
11import ai.nextbillion.navigation.demo.R;
12import ai.nextbillion.navigation.ui.NBNavigation;
13import ai.nextbillion.navigation.ui.NavLauncherConfig;
14import ai.nextbillion.navigation.ui.NavigationLauncher;
15import androidx.annotation.NonNull;
16import androidx.appcompat.app.AppCompatActivity;
17import retrofit2.Call;
18import retrofit2.Callback;
19import retrofit2.Response;
20
21public class NavigationActivity extends AppCompatActivity implements View.OnClickListener {
22
23 private Button fetchRoute;
24 private Button startNav;
25 private TextView routeGeometry;
26 private DirectionsRoute directionsRoute;
27 private ProgressBar progress;
28 @Override
29 protected void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31 setContentView(R.layout.activity_main);
32 fetchRoute = findViewById(R.id.fetchRoute);
33 startNav = findViewById(R.id.startNav);
34 routeGeometry = findViewById(R.id.routeGeometry);
35 progress = findViewById(R.id.progress);
36 fetchRoute.setOnClickListener(this);
37 startNav.setOnClickListener(this);
38 startNav.setEnabled(false);
39
40 }
41
42 @Override
43 public void onClick(View view) {
44 if (view.getId() == R.id.fetchRoute) {
45 progress.setVisibility(View.VISIBLE);
46 Point origin = Point.fromLngLat(103.75986708439264, 1.312533169133601);
47 Point destination = Point.fromLngLat(103.77982271935586, 1.310473772283314);
48
49 NBNavigation.fetchRoute(origin, destination, new Callback<DirectionsResponse>() {
50 @Override
51 public void onResponse(@NonNull Call<DirectionsResponse> call, @NonNull Response<DirectionsResponse> response) {
52 progress.setVisibility(View.GONE);
53 //start navigation with the route we just fetched.
54 if (response.body() != null && !response.body().routes().isEmpty()) {
55 directionsRoute = response.body().routes().get(0);
56 routeGeometry.setText(String.format("Route Geometry: %s", directionsRoute.geometry()));
57 startNav.setEnabled(true);
58 }
59 }
60
61 @Override
62 public void onFailure(@NonNull Call<DirectionsResponse> call, @NonNull Throwable t) {
63 progress.setVisibility(View.GONE);
64 }
65 });
66 } else if (view.getId() == R.id.startNav) {
67 NavLauncherConfig.Builder configBuilder = NavLauncherConfig.builder(directionsRoute);
68 configBuilder.locationLayerRenderMode(RenderMode.GPS);
69 configBuilder.shouldSimulateRoute(true);
70 NavigationLauncher.startNavigation(NavigationActivity.this, configBuilder.build());
71 }
72 }
73}
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
Start navigation NavLauncherConfig object is created with the previously fetched route and additional configuration options such as location layer render mode and route simulation. The NavigationLauncher.startNavigation method is called to start the navigation activity with the provided configuration.