Настроить карту

Выберите платформу: Android iOS

Чтобы отслеживать маршрут в вашем потребительском приложении, сначала необходимо определить карту и, при необходимости, добавить поддержку векторных карт.

Чтобы настроить карту в вашем приложении, выполните следующие действия:

  1. Определите фрагмент карты для отслеживания маршрута .
  2. Добавить поддержку базового слоя карты и контроллера представления .
  3. При необходимости добавить поддержку векторной графики Android для отображения векторных карт.

После определения карты вы можете добавить дополнительные виды и элементы управления камерой, чтобы настроить визуальное восприятие. Подробнее см. раздел «Стиль карты» .

Шаг 1: Определите фрагмент карты для отслеживания маршрута.

Вы определяете карту, добавляя фрагмент карты или представление для создания карты, на которой вы делитесь информацией о поездке по запросу в своем потребительском приложении. Чтобы определить карту, воспользуйтесь одним из следующих способов:

  • ConsumerMapFragment : Используйте для определения карты с помощью Fragment .

  • ConsumerMapView : Используется для определения карты с помощью View .

Функционал обоих методов одинаков, поэтому выберите тот, который лучше подходит для вашего приложения.

Оба метода более подробно описаны в следующем разделе.

Добавить фрагмент карты или вид

Чтобы создать карту для отображения хода поездки с помощью Android-фрагмента или представления, выполните следующие шаги и обратитесь к примерам кода.

  1. Определите фрагмент или представление в XML-файле макета вашего приложения, расположенном в /res/layout . Определите карту маршрута либо как фрагмент, используя ConsumerMapFragment , либо как представление, используя ConsumerMapView .

    Затем фрагмент или представление предоставляет доступ к карте маршрута, к которой ваше приложение может получить доступ и которую может изменять. Карта также предоставляет ссылку на ConsumerController , что позволяет вашему приложению управлять и настраивать взаимодействие с пользователем.

  2. В методе onCreate() вызовите getConsumerGoogleMapAsync(callback) , который асинхронно вернет объект ConsumerGoogleMap в функции обратного вызова.

  3. Используйте ConsumerGoogleMap для отображения хода поездки и обновляйте информацию по мере необходимости.

Пример добавления ConsumerMapFragment

  1. Определите фрагмент в 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" />
    
  2. Вызовите метод ` 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

  1. Используйте представление либо во фрагменте, либо в активности, как определено в вашем 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" />
    
  2. Вызовите метод 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 и векторных изображений, выполнив следующие шаги:

  1. Добавьте следующий код в ваше 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

Оформите карту