Source: https://maps.vietmap.vn/docs/sdk-mobile/sdk-android/navigation/ # Navigation ### Gradle and AndroidManifest configure ### Add dependencies below to build.gradle module app ```gradle implementation "androidx.recyclerview:recyclerview:1.2.1" implementation "androidx.cardview:cardview:1,0,0" implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" implementation "com.google.android.gms:play-services-location:21.0.1" implementation "com.jakewharton:butterknife:10.2.3" implementation 'androidx.core:core-ktx:1.7.0' implementation 'com.github.vietmap-company:maps-sdk-android:2.6.0' implementation 'com.github.vietmap-company:maps-sdk-navigation-ui-android:2.3.2' implementation 'com.github.vietmap-company:maps-sdk-navigation-android:2.3.3' implementation 'com.github.vietmap-company:vietmap-services-core:1.0.0' implementation 'com.github.vietmap-company:vietmap-services-directions-models:1.0.1' implementation 'com.github.vietmap-company:vietmap-services-turf-android:1.0.2' implementation 'com.github.vietmap-company:vietmap-services-android:1.1.2' implementation 'com.squareup.picasso:picasso:2.8' implementation 'com.github.vietmap-company:vietmap-services-geojson-android:1.0.0' implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.2.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.google.code.gson:gson:2.10.1' implementation 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' ``` Configure the **jitpack repository** in the **setting.gradle** file ```gradle dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() // Add two lines below to the repositories block (In setting.gradle file) maven { url 'https://plugins.gradle.org/m2' } maven { url 'https://jitpack.io' } } } ``` With older projects, place it to the **build.gradle** file at module project ```gradle allprojects { repositories { google() maven { url "https://jitpack.io" } } } ``` Upgrade the **compileSdk** and **targetSdk** to version **34** ```gradle compileSdk 34 ``` ```gradle targetSdk 34 ``` Upgrade the **minSdk** to version **24** ```gradle minSdk 24 ``` Add the necessary permission request to the AndroidManifest.xml file ```xml ``` For android 14 and above - Add the service to the AndroidManifest.xml file (in `` tag) ```xml ``` ### Request location permission in MainActivity - Add the function to check location permission and push to the navigation activity - Configure system speech engine to google, our SDK use system speech engine to speak out the instruction ```java class MainActivity : AppCompatActivity(), PermissionsListener { private var permissionsManager: PermissionsManager? = null private var textToSpeech: TextToSpeech? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button: Button = findViewById(R.id.pushToNavigationScreen) val ttsButton: Button = findViewById(R.id.testSpeech) val speechAgain: Button = findViewById(R.id.speechAgain) val intent = Intent(this, VietMapNavigationExampleV2::class.java) button.setOnClickListener { startActivity(intent) speechAgain.visibility = GONE } speechAgain.setOnClickListener { speakOut("Language: Vietnamese") } ttsButton.setOnClickListener { startActivity(Intent("com.android.settings.TTS_SETTINGS")) speechAgain.visibility = VISIBLE } permissionsManager = PermissionsManager(this) if (!PermissionsManager.areLocationPermissionsGranted(this)) { permissionsManager!!.requestLocationPermissions(this) } textToSpeech = TextToSpeech( applicationContext ) { setTextToSpeechLanguage() } } private fun setTextToSpeechLanguage() { val language = Locale("vi", "VN") when (textToSpeech!!.setLanguage(language)) { TextToSpeech.LANG_MISSING_DATA -> { Toast.makeText(this, "Missing language data", Toast.LENGTH_LONG).show() return } TextToSpeech.LANG_NOT_SUPPORTED -> { Toast.makeText( this, "Language not supported " + language.language, Toast.LENGTH_LONG ).show() return } else -> { Toast.makeText(this, "Language: Vietnamese", Toast.LENGTH_LONG).show() speakOut("Language: Vietnamese") } } } private fun speakOut(speechContent: String) { val utteranceId: String = UUID.randomUUID().toString() textToSpeech!!.speak(speechContent, TextToSpeech.QUEUE_FLUSH, null, utteranceId) } override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionsManager!!.onRequestPermissionsResult(requestCode, permissions, grantResults) } override fun onExplanationNeeded(permissionsToExplain: List?) { Toast.makeText( this, "This app needs location permissions in order to show its functionality.", Toast.LENGTH_LONG ).show() } override fun onPermissionResult(granted: Boolean) { if (granted) { } else { Toast.makeText( this, "You didn't grant location permissions.", Toast.LENGTH_LONG ).show() } } } ``` In **activity_main.xml** file, add button layout ```js