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.
- Ajout de la prise en charge d'un calque de base et d'un contrôleur d'affichage pour les cartes
- 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 et des commandes de caméra supplémentaires 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
Pour définir une carte, ajoutez un fragment ou une vue de carte afin de créer la carte sur laquelle vous partagez un trajet à la demande dans votre application grand public. Pour définir votre carte, procédez comme suit:
ConsumerMapFragment
: utilisez-le pour définir votre carte avec unFragment
.ConsumerMapView
: permet de définir une carte avec unView
.
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 afin d'afficher la progression du trajet à l'aide d'un fragment Android ou d'une vue, procédez comme suit et consultez les 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 en tant que fragment à l'aide deConsumerMapFragment
ou en tant que vue à l'aide deConsumerMapView
.Le fragment ou la vue fournit ensuite un accès à la carte de trajet que votre application peut consulter et modifier. La carte fournit également un contrôleur pour
ConsumerController
, ce qui permet à votre application de contrôler et de personnaliser l'expérience client.À partir de votre méthode
onCreate()
, appelezgetConsumerGoogleMapAsync(callback)
, qui renvoieConsumerGoogleMap
de manière asynchrone dans le rappel.Utilisez
ConsumerGoogleMap
pour afficher la progression du trajet et la 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 illustré 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 :Activité ou fragment contenant. La classe de base de l'activité ou du fragment doit être un
FragmentActivity
ou unFragment
d'assistance (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'un calque de fond et d'un contrôleur de vue Maps
Pour partager la progression du trajet dans votre application, ajoutez les classes suivantes: ConsumerGoogleMap
et ConsumerController
.
Obtenez
ConsumerGoogleMap
à partir deConsumerMapFragment
ou deConsumerMapView
, qui renvoient tous deuxConsumerGoogleMap
de manière asynchrone dansConsumerMapReadyCallback
.ConsumerGoogleMap
est une classe wrapper pour la classeGoogleMap
. Il utilise une API équivalente àGoogleMap
pour que votre application puisse interagir avec la carte. De cette manière, votre application peut interagir de manière fluide avec la même carte Google sous-jacente. Par exemple,GoogleMap
n'autorise qu'un seul enregistrement de rappel, maisConsumerGoogleMap
accepte les rappels enregistrés en double. Ces rappels permettent à votre application d'enregistrer des rappels appelés de manière séquentielle.Obtenez
ConsumerController
à partir deConsumerGoogleMap
dansgetConsumerController()
.ConsumerController
permet 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 de lieux.
Pour savoir comment ajouter ConsumerGoogleMap
et ConsumerController
à votre application en Java et en 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 éléments vectoriels drawables en procédant comme suit:
- Ajoutez le code suivant à votre activité. Ce code étend
AppCompatActivity
pour 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() {
// ...
}