コンシューマ アプリでルートの経路を表示するには、まず地図を定義し、必要に応じてベクター地図のサポートを追加する必要があります。
アプリに地図を設定する手順は次のとおりです。
- ルートに沿って表示される地図フラグメントを定義する。
- 地図ベースレイヤとビュー コントローラのサポートを追加。
- 必要に応じて、Android ベクター グラフィックのサポートを追加してベクター地図を表示します。
地図を定義したら、視覚的なエクスペリエンスをカスタマイズするために、ビューとカメラ コントロールを追加できます。詳しくは、地図のスタイルを設定するをご覧ください。
ステップ 1: ルートに沿って移動する地図フラグメントを定義する
地図を定義するには、地図フラグメントまたはビューを追加して、コンシューマ アプリでオンデマンド ルートを共有する地図を作成します。地図を定義するには、次のいずれかの方法を使用します。
どちらの方法でも機能は同じです。アプリケーションに適した方法を選択してください。
両方の方法については、次のセクションで詳しく説明します。
地図フラグメントまたはビューを追加する
Android フラグメントまたはビューを使用してルートの進行状況を表示する地図を作成する手順は次のとおりです。コード例も参照してください。
/res/layout
にあるアプリのレイアウト XML ファイルで、フラグメントまたはビューを定義します。ルートマップを、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" />
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
を追加する方法の例
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()
を呼び出します。コールバック パラメータに加えて、次の詳細情報を含めます。包含するアクティビティまたはフラグメント。アクティビティまたはフラグメントのベースクラスは、ライフサイクルへのアクセスを提供するため、それぞれ
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,
)
}
}
フラグメント内の MapView
は、アクティビティ内の MapView
の前の例と同じですが、フラグメントはフラグメントの 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
ではコールバックの登録は 1 回だけ許可されますが、ConsumerGoogleMap
では 2 回登録されたコールバックをサポートしています。これらのコールバックを使用すると、アプリは順番に呼び出されるコールバックを登録できます。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 デバイスとベクター ドローアブルのサポートを追加します。
- アクティビティに次のコードを追加します。このコードは、コンシューマ SDK でベクター型ドローアブルを使用するように
AppCompatActivity
を拡張します。
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}