Чтобы следить за поездкой в потребительском приложении, сначала необходимо определить карту и при необходимости добавить поддержку векторных карт.
Чтобы настроить карту в вашем приложении, выполните следующие действия:
- Определите фрагмент карты для отслеживания поездки .
- Добавьте поддержку базового слоя карт и контроллера представления .
- При необходимости добавьте поддержку векторной графики 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()
.
Ява
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
(который может иметь значение null), содержащий атрибуты конфигурации дляMapView
.
Ява
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()
фрагмента.
Ява
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, см. следующие примеры.
Ява
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 и векторных изображений, выполнив следующие действия:
- Добавьте следующий код в свою деятельность. Этот код расширяет
AppCompatActivity
для использования векторных рисунков в Consumer SDK.
Ява
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Котлин
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}