Source: https://maps.vietmap.vn/docs/vi/sdk-mobile/sdk-android/navigation/ # Dẫn đường ### Cấu hình Gradle và AndroidManifest ### Thêm các dependency sau vào build.gradle của 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' ``` Khai báo **repository jitpack** trong file **settings.gradle** ```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' } } } ``` Với dự án cũ, đặt khai báo này vào file **build.gradle** cấp project ```gradle allprojects { repositories { google() maven { url "https://jitpack.io" } } } ``` Nâng **compileSdk** và **targetSdk** lên **34** ```gradle compileSdk 34 ``` ```gradle targetSdk 34 ``` Nâng **minSdk** lên **24** ```gradle minSdk 24 ``` Khai báo các quyền cần thiết trong file `AndroidManifest.xml` ```xml ``` Với Android 14 trở lên - Khai báo service trong file `AndroidManifest.xml` (bên trong thẻ ``) ```xml ``` ### Xin quyền vị trí trong MainActivity - Thêm hàm kiểm tra quyền vị trí rồi mở activity dẫn đường - Đặt bộ đọc văn bản (text-to-speech) của hệ thống là Google; SDK dùng bộ đọc của hệ thống để đọc hướng dẫn rẽ ```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() } } } ``` Trong file **activity_main.xml**, thêm nút bấm ```js