Чтобы отслеживать маршрут в вашем потребительском приложении, сначала необходимо определить карту и, при необходимости, добавить поддержку векторных карт.
Чтобы настроить карту в вашем приложении, выполните следующие действия:
- Определите фрагмент карты для отслеживания маршрута .
- Добавить поддержку базового слоя карты и контроллера представления .
- При необходимости добавить поддержку векторной графики Android для отображения векторных карт.
После определения карты вы можете добавить дополнительные виды и элементы управления камерой, чтобы настроить визуальное восприятие. Подробнее см. раздел «Стиль карты» .
Шаг 1: Определите фрагмент карты для отслеживания маршрута.
Вы определяете карту, добавляя фрагмент карты или представление для создания карты, на которой вы делитесь информацией о поездке по запросу в своем потребительском приложении. Чтобы определить карту, воспользуйтесь одним из следующих способов:
ConsumerMapFragment: Используйте для определения карты с помощьюFragment.ConsumerMapView: Используется для определения карты с помощьюView.
Функционал обоих методов одинаков, поэтому выберите тот, который лучше подходит для вашего приложения.
Оба метода более подробно описаны в следующем разделе.
Добавить фрагмент карты или вид
Чтобы создать карту для отображения хода поездки с помощью Android-фрагмента или представления, выполните следующие шаги и обратитесь к примерам кода.
Определите фрагмент или представление в XML-файле макета вашего приложения, расположенном в
/res/layout. Определите карту маршрута либо как фрагмент, используяConsumerMapFragment, либо как представление, используяConsumerMapView.Затем фрагмент или представление предоставляет доступ к карте маршрута, к которой ваше приложение может получить доступ и которую может изменять. Карта также предоставляет ссылку на
ConsumerController, что позволяет вашему приложению управлять и настраивать взаимодействие с пользователем.В методе
onCreate()вызовитеgetConsumerGoogleMapAsync(callback), который асинхронно вернет объектConsumerGoogleMapв функции обратного вызова.Используйте
ConsumerGoogleMapдля отображения хода поездки и обновляйте информацию по мере необходимости.
Пример добавления ConsumerMapFragment
Определите фрагмент в XML-файле макета вашего приложения, как показано в следующем примере кода.
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment" android:id="@+id/consumer_map_fragment" android:layout_width="match_parent" android:layout_height="match_parent" />Вызовите метод `
getConsumerGoogleMapAsync()из метода `onCreate().
Java
public class SampleAppActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Find the ConsumerMapFragment.
ConsumerMapFragment consumerMapFragment =
(ConsumerMapFragment) fragmentManager.findFragmentById(R.id.consumer_map_fragment);
// Initiate the callback that returns the map.
if (consumerMapFragment != null) {
consumerMapFragment.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
ConsumerController consumerController = consumerGoogleMap.getConsumerController();
}
});
}
}
}
Котлин
class SampleAppActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Find the ConsumerMapFragment.
val consumerMapFragment =
fragmentManager.findFragmentById(R.id.consumer_map_fragment) as ConsumerMapFragment
consumerMapFragment.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
val consumerController = consumerGoogleMap.getConsumerController()!!
}
}
)
}
}
Пример добавления ConsumerMapView
Используйте представление либо во фрагменте, либо в активности, как определено в вашем XML-файле.
<com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/consumer_map_view" android:layout_width="match_parent" android:layout_height="match_parent" />Вызовите метод
getConsumerGoogleMapAsync()изonCreate(). В дополнение к параметру обратного вызова укажите следующие сведения:Содержащая активность или фрагмент. Базовый класс активности или фрагмента должен быть либо
FragmentActivity, либо вспомогательнымFragment(соответственно), поскольку они обеспечивают доступ к его жизненному циклу.GoogleMapOptions(который может быть пустым), содержащий атрибуты конфигурации дляMapView.
Java
public class SampleAppActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
ConsumerMapView mapView = findViewById(R.id.consumer_map_view);
if (mapView != null) {
mapView.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
ConsumerController consumerController = consumerGoogleMap.getConsumerController();
}
}, this, null);
}
}
}
Котлин
class SampleAppActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView
mapView.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
val consumerController = consumerGoogleMap.getConsumerController()!!
}
},
/* fragmentActivity= */ this,
/* googleMapOptions= */ null,
)
}
}
Использование MapView во фрагменте аналогично предыдущему примеру с MapView в активности, за исключением того, что фрагмент создает макет, включающий MapView в методе onCreateView() фрагмента.
Java
public class MapViewInFragment extends Fragment {
@Override
public View onCreateView(
@NonNull LayoutInflater layoutInflater,
@Nullable ViewGroup viewGroup,
@Nullable Bundle bundle) {
return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false);
}
}
Котлин
class MapViewInFragment : Fragment() {
override fun onCreateView(
layoutInflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false)
}
}
Шаг 2: Добавить поддержку базового слоя карты и контроллера представления.
Чтобы отображать ход поездки в вашем приложении, добавьте в него следующие классы: ConsumerGoogleMap и ConsumerController .
Получить
ConsumerGoogleMapможно либо изConsumerMapFragment, либоConsumerMapView; оба объекта асинхронно возвращаютConsumerGoogleMapвConsumerMapReadyCallback.ConsumerGoogleMap— это класс-обертка для классаGoogleMap. Он использует API, эквивалентныйGoogleMap, чтобы ваше приложение могло взаимодействовать с картой. Таким образом, ваше приложение может беспрепятственно взаимодействовать с той же самой базовой картой Google. Например,GoogleMapдопускает только одну регистрацию обратных вызовов, ноConsumerGoogleMapподдерживает две зарегистрированные обратные вызовы. Эти обратные вызовы позволяют вашему приложению регистрировать обратные вызовы, которые вызываются последовательно.Получите
ConsumerControllerизConsumerGoogleMapвgetConsumerController().ConsumerControllerпредоставляет доступ к функциям совместного использования поездок, таким как мониторинг поездок, управление статусом поездок и установка местоположений.
Инструкции по добавлению ConsumerGoogleMap и ConsumerController в ваше приложение на Java и Kotlin приведены в следующих примерах.
Java
private ConsumerGoogleMap consumerGoogleMap;
private ConsumerController consumerController;
private ConsumerMapView consumerMapView;
consumerMapView.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerMap) {
consumerGoogleMap = consumerMap;
consumerController = consumerMap.getConsumerController();
}
},
this, null);
Котлин
var consumerGoogleMap: ConsumerGoogleMap
var consumerController: ConsumerController
val consumerMapView = findViewById(R.id.consumer_map_view) as ConsumerMapView
consumerMapView.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
override fun onConsumerMapReady(consumerMap: ConsumerGoogleMap) {
consumerGoogleMap = consumerMap
consumerController = consumerMap.getConsumerController()
},
/* fragmentActivity= */ this,
/* googleMapOptions= */ null,
}
)
Шаг 3: Добавить поддержку векторной графики Android.
Если дизайн вашего приложения требует поддержки векторной графики, добавьте поддержку устройств Android и векторных изображений, выполнив следующие шаги:
- Добавьте следующий код в ваше Activity. Этот код расширяет
AppCompatActivity, чтобы использовать векторные изображения из Consumer SDK.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Котлин
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}
Что дальше?
Следите за путешествием в Android