Pour suivre un trajet dans votre application grand public, vous devez d'abord définir une carte et ajouter la prise en charge des cartes vectorielles, si nécessaire.
Pour configurer une carte dans votre application, procédez comme suit :
- Définissez un fragment de carte pour suivre un trajet.
- Ajoutez la prise en charge d'une couche de base de carte et d'un contrôleur de vue.
- Ajoutez la prise en charge des graphiques vectoriels Android pour afficher des cartes vectorielles, si nécessaire.
Une fois que vous avez défini une carte, vous pouvez ajouter des vues supplémentaires et des commandes de caméra pour personnaliser l'expérience visuelle. Pour en savoir plus, consultez Appliquer un style à une carte.
Étape 1 : Définir un fragment de carte pour suivre un trajet
Vous définissez une carte en ajoutant un fragment ou une vue de carte pour créer la carte sur laquelle vous partagez un trajet à la demande dans votre application grand public. Pour définir votre carte, suivez l'une des méthodes suivantes :
ConsumerMapFragment: utilisez-la pour définir votre carte avec unFragment.ConsumerMapView: utilisez-la pour définir une carte avec uneView.
Les fonctionnalités sont les mêmes pour les deux méthodes. Choisissez celle qui convient le mieux à votre application.
Les deux méthodes sont expliquées plus en détail dans la section suivante.
Ajouter un fragment ou une vue de carte
Pour créer une carte permettant d'afficher la progression du trajet à l'aide d'un fragment ou d'une vue Android, procédez comme suit et reportez-vous aux exemples de code.
Définissez un fragment ou une vue dans le fichier XML de mise en page de votre application situé dans
/res/layout. Définissez la carte du trajet comme un fragment à l'aide deConsumerMapFragmentou comme une vue à l'aide deConsumerMapView.Le fragment ou la vue fournit ensuite un accès à la carte du trajet à laquelle votre application peut accéder et qu'elle peut modifier. La carte fournit également un handle au
ConsumerController, ce qui permet à votre application de contrôler et de personnaliser l'expérience utilisateur.À partir de votre méthode
onCreate(), appelezgetConsumerGoogleMapAsync(callback), qui renvoie leConsumerGoogleMapde manière asynchrone dans le rappel.Utilisez le
ConsumerGoogleMappour afficher la progression du trajet et le mettre à jour si nécessaire.
Exemple d'ajout de ConsumerMapFragment
Définissez le fragment dans le fichier XML de mise en page de votre application, comme indiqué dans l'exemple de code suivant.
<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" />Appelez
getConsumerGoogleMapAsync()à partir de la méthodeonCreate().
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()!!
}
}
)
}
}
Exemple d'ajout de ConsumerMapView
Utilisez la vue dans un fragment ou dans une activité, comme défini dans votre fichier 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" />Appelez
getConsumerGoogleMapAsync()à partir deonCreate(). En plus du paramètre de rappel, incluez les informations suivantes :L'activité ou le fragment contenant. La classe de base de l'activité ou du fragment doit être un
FragmentActivityou unFragmentde support (respectivement), car ils permettent d'accéder à son cycle de vie.GoogleMapOptions(qui peut être nul), contenant des attributs de configuration pour leMapView.
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,
)
}
}
Un MapView dans un fragment est identique à l'exemple précédent pour MapView dans une activité, sauf que le fragment gonfle la mise en page qui inclut le MapView dans la méthode onCreateView() du fragment.
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)
}
}
Étape 2 : Ajouter la prise en charge d'une couche de base de carte et d'un contrôleur de vue
Pour partager la progression du trajet dans votre application, ajoutez les classes suivantes à votre application : ConsumerGoogleMap et ConsumerController.
Obtenez
ConsumerGoogleMapà partir deConsumerMapFragmentou deConsumerMapView, qui renvoient tous deux de manière asynchroneConsumerGoogleMapdansConsumerMapReadyCallback.ConsumerGoogleMapest une classe wrapper pour la classeGoogleMap. Elle utilise une API équivalente àGoogleMapafin que votre application puisse interagir avec la carte. De cette façon, votre application peut interagir de manière transparente avec la même carte Google sous-jacente. Par exemple,GoogleMapn'autorise qu'un seul enregistrement de rappel, maisConsumerGoogleMapprend en charge les rappels enregistrés doubles. Ces rappels permettent à votre application d'enregistrer des rappels qui sont appelés de manière séquentielle.Obtenez
ConsumerControllerà partir deConsumerGoogleMapdansgetConsumerController().ConsumerControllerpermet d'accéder aux fonctionnalités de partage de trajets, telles que la surveillance des trajets, le contrôle de l'état des trajets et la définition des lieux.
Pour savoir comment ajouter ConsumerGoogleMap et ConsumerController à votre application en Java et Kotlin, consultez les exemples suivants.
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,
}
)
Étape 3 : Ajouter la prise en charge des graphiques vectoriels Android
Si la conception de votre application nécessite la prise en charge des graphiques vectoriels, ajoutez la prise en charge des appareils Android et des drawables vectoriels en procédant comme suit :
- Ajoutez le code suivant à votre activité. Ce code étend
AppCompatActivitypour utiliser les drawables vectoriels dans le SDK Consumer.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}
Étape suivante
Appliquer un style à une carte