Hi I'm trying to implement RoutePreviewNavigationTemplate but have some troubles:
1.- Routes List is displayed but the map in background is not showed
2.- For this reason i can't draw the route between my current location and place A or B
this is my code where I build the template, 2 routes and the list of them
class RoutePreviewScreen(carContext: CarContext) : Screen(carContext) {
@RequiresApi(Build.VERSION_CODES.O)
@SuppressLint("UnsafeOptInUsageError")
override fun onGetTemplate(): Template {
val builder = RoutePreviewNavigationTemplate.Builder()
val locationA = CarLocation.create(19.2689369, -103.7636865)
val locationB = CarLocation.create(19.269160, -103.754996)
val markerA = PlaceMarker.Builder().setColor(CarColor.RED).build()
val markerB = PlaceMarker.Builder().setColor(CarColor.BLUE).build()
val placeA = Place.Builder(locationA).setMarker(markerA).build()
val placeB = Place.Builder(locationB).setMarker(markerB).build()
val routeItem = Row.Builder()
.setTitle(CarText.create("From current to A"))
.addText(SpannableString(" ").apply {
setSpan(
DistanceSpan.create(
Distance.create(Math.random() * 100, Distance.UNIT_KILOMETERS)
), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
})
.addText(SpannableString(" ").apply {
setSpan(
DurationSpan.create(
Duration.ofHours(3)
), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
})
.setMetadata(
Metadata.Builder()
.setPlace(placeA)
.build()
)
.build()
val routeItem2 = Row.Builder()
.setTitle(CarText.create("From current location to A"))
.addText(SpannableString(" ").apply {
setSpan(
DistanceSpan.create(
Distance.create(Math.random() * 200, Distance.UNIT_KILOMETERS)
), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
})
.addText(SpannableString(" ").apply {
setSpan(
DurationSpan.create(
Duration.ofHours(3)
), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
})
.setMetadata(
Metadata.Builder()
.setPlace(placeB)
.build()
)
.build()
val itemList = ItemList.Builder()
.addItem(routeItem)
.addItem(routeItem2)
.setOnSelectedListener {
//TODO SELECTED
}
.build()
builder.setItemList(itemList)
val navigateAction = Action.Builder()
.setTitle("Start Navigation")
.setOnClickListener {
//TODO IMPLEMENT NAVIGATION
}
.build()
builder.setNavigateAction(navigateAction)
return builder.build()
}
}
For navigation apps (those that use the
NavigationTemplateand supporting templates like theMapTemplate,RoutePreviewNavigationTemplate, andPlaceListNavigationTemplate), you are responsible for drawing the map yourself. See Draw the map for more details. https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:car/app/app-samples/navigation/ also has a sample app that you can reference, withSurfaceRendererbeing of particular interest there.This is in contrast to point of interest (POI) apps, which use the
PlaceListMapTemplate, which handles drawing the map and markers for you.