设置地图

请选择平台: Android iOS

要在消费者应用中跟踪行程,您首先需要定义 地图,并根据需要添加对矢量地图的支持。

如需在您的应用中设置地图,请按以下步骤操作:

  1. 定义用于分享旅程的地图 fragment
  2. 添加对地图基础图层和视图控制器的支持
  3. 添加对 Android 矢量图形的支持以显示矢量 地图(如果需要的话)。

定义地图后,您可以添加其他视图和镜头 您想要自定义视觉体验的控件。如需了解更多详情, 请参阅设置地图样式

第 1 步:定义用于分享行程的地图 fragment

您可以通过添加地图 fragment 或视图来定义地图,其中 您在消费者应用中分享了一个按需行程。要定义您的地图,请执行以下操作: 请采用以下方法之一:

  • ConsumerMapFragment:用于定义地图 Fragment

  • ConsumerMapView:用于定义具有 View

这两种方法的特性相同,因此请选择具体方法 更适合您的应用

下一部分将更详细地介绍这两种方法。

添加地图 fragment 或视图

使用以下任一方法创建地图以显示行程进度: Android fragment 或视图,请按照以下步骤操作并参阅 代码示例。

  1. 在位于 /res/layout。使用以下代码将旅程共享地图定义为 fragment: ConsumerMapFragment,或者使用 ConsumerMapView 以视图形式使用。

    然后,fragment 或 View 提供对历程的访问权限 分享地图,您的应用可以访问和修改。该地图还提供了 ConsumerController 的句柄,可让应用控制和 自定义旅程分享体验。

  2. onCreate() 方法中调用 getConsumerGoogleMapAsync(callback)。 该函数会在回调中异步返回 ConsumerGoogleMap

  3. 使用 ConsumerGoogleMap 显示行程进度并根据需要进行更新。

添加 ConsumerMapFragment 的示例

  1. 在应用布局 XML 文件中定义 fragment,如 请参阅下方代码示例

    <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. onCreate() 调用 getConsumerGoogleMapAsync() 方法。

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 的示例

  1. 在 fragment 或 activity 中使用该视图,如 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. onCreate() 调用 getConsumerGoogleMapAsync()。在 除回调参数外,还应添加以下详细信息:

    • 所属的 activity 或 fragment。activity 或 fragment 库 类必须是 FragmentActivity 或支持 Fragment 因为它们提供了对其生命周期的访问权限。

    • GoogleMapOptions(可以为 null),包含配置 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,
    )
  }
}

fragment 中的 MapView 与上述示例中的 MapView,不过 fragment 会膨胀 在 fragment onCreateView() 方法中包含 MapView

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 步:添加对地图基础图层和视图控制器的支持

如需在您的应用中启用旅程分享功能,请添加 以下类:ConsumerGoogleMapConsumerController

  • 通过 ConsumerMapFragmentConsumerGoogleMap ConsumerMapView,这两者都会异步返回 ConsumerMapReadyCallbackConsumerGoogleMap

    ConsumerGoogleMapGoogleMap 类的封装容器类。它使用 API 相当于 GoogleMap,以便您的应用可以与地图进行交互。 这样,您的应用就可以与同一个底层 Google 地图。例如,GoogleMap 仅允许单个回调注册,但 ConsumerGoogleMap 支持双注册的回调。借助这些回调 您的应用会注册依序调用的回调。

  • getConsumerController()内从ConsumerGoogleMap获取ConsumerController

    ConsumerController提供行程分享功能,例如 监控行程、控制行程状态和设置地点。

如需了解如何将 ConsumerGoogleMapConsumerController 添加到您的应用中,请访问 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 设备和矢量可绘制对象,具体步骤如下:

  1. 将以下代码添加到您的 Activity 中。此代码扩展了 AppCompatActivity,用于在使用方 SDK 中使用矢量可绘制对象。

Java

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

// ...

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

Kotlin

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

// ...

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

后续步骤

在 Android 中跟踪行程 设置地图样式