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

Выберите платформу: 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() .

Ява

 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 (который может иметь значение 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 и векторных изображений, выполнив следующие действия:

  1. Добавьте следующий код в свою деятельность. Этот код расширяет AppCompatActivity для использования векторных рисунков в Consumer SDK.

Ява

// ...
import android.support.v7.app.AppCompatActivity;

// ...

public class ConsumerTestActivity extends AppCompatActivity {
  // ...
}

Котлин

// ...
import android.support.v7.app.AppCompatActivity

// ...

class ConsumerTestActivity : AppCompatActivity() {
  // ...
}

Что дальше

Следите за поездкой на Android

Оформление карты