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