如需在面向消费者的应用中跟踪行程,您首先需要定义地图,并根据需要添加对矢量地图的支持。
如需在您的应用中设置地图,请按以下步骤操作:
- 定义用于跟踪行程的地图 fragment。
- 添加了对地图底图和视图控制器的支持。
- 添加对 Android 矢量图形的支持,以显示矢量地图(如果需要)。
定义地图后,您可以添加要自定义视觉体验的其他视图和相机控件。如需了解详情,请参阅设置地图样式。
第 1 步:定义用于跟踪行程的地图 fragment
您可以通过添加地图 fragment 或视图来定义地图,从而在消费者应用中创建用于分享按需行程的地图。如需定义地图,请按以下方法之一操作:
这两种方法的功能相同,因此请选择哪种方法更适合您的应用。
以下部分将更详细地介绍这两种方法。
添加地图 fragment 或视图
如需创建地图以使用 Android fragment 或 View 显示行程进度,请按以下步骤操作并参阅代码示例。
在位于
/res/layout
的应用布局 XML 文件中定义 fragment 或视图。使用ConsumerMapFragment
将行程地图定义为 fragment,或使用ConsumerMapView
定义为视图。然后,fragment 或 View 会提供对您的应用可以访问和修改的行程地图的访问权限。该映射还提供了
ConsumerController
的句柄,可让您的应用控制和自定义消费者体验。在
onCreate()
方法中,调用getConsumerGoogleMapAsync(callback)
,它会在回调中异步返回ConsumerGoogleMap
。使用
ConsumerGoogleMap
显示行程进度并根据需要进行更新。
添加 ConsumerMapFragment
的示例
在应用布局 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" />
从
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
的示例
在 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" />
从
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
与 activity 中的 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 步:添加对地图底图和视图控制器的支持
如需在应用中分享行程进度,请将以下类添加到您的应用:ConsumerGoogleMap
和 ConsumerController
。
从
ConsumerMapFragment
或ConsumerMapView
获取ConsumerGoogleMap
,这两者都会在ConsumerMapReadyCallback
中异步返回ConsumerGoogleMap
。ConsumerGoogleMap
是GoogleMap
类的封装容器类。它使用等同于GoogleMap
的 API,以便您的应用可以与地图互动。这样一来,您的应用就可以与同一个底层 Google 地图无缝互动。例如,GoogleMap
仅允许单个回调注册,但ConsumerGoogleMap
支持双注册的回调。借助这些回调,您的应用可以注册按顺序调用的回调。在
getConsumerController()
中从ConsumerGoogleMap
获取ConsumerController
。ConsumerController
提供对行程分享功能的访问权限,例如监控行程、控制行程状态和设置位置。
如需了解如何使用 Java 和 Kotlin 向应用添加 ConsumerGoogleMap
和 ConsumerController
,请参阅以下示例。
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
,以便在 Consumer SDK 中使用矢量可绘制对象。
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}