Per seguire un viaggio nella tua app per consumatori, devi prima definire una mappa e aggiungere il supporto per le mappe vettoriali, se necessario.
Per configurare una mappa nella tua app:
- Definisci un frammento di mappa per seguire un viaggio.
- Aggiunta del supporto per un livello base delle mappe e un controllo visualizzazione.
- Aggiungi il supporto per le immagini vettoriali Android per visualizzare le mappe vettoriali, se necessario.
Dopo aver definito una mappa, puoi aggiungere altre visualizzazioni e controlli della fotocamera per personalizzare l'esperienza visiva. Per maggiori dettagli, consulta Applicare uno stile a una mappa.
Passaggio 1: definisci un frammento di mappa per seguire un viaggio
Per definire una mappa, aggiungi un frammento o una visualizzazione della mappa per creare la mappa in cui condividi un viaggio on demand nella tua app per consumatori. Per definire la mappa, segui uno di questi metodi:
ConsumerMapFragment
: da utilizzare per definire la mappa con unFragment
.ConsumerMapView
: da utilizzare per definire una mappa con unView
.
Le funzionalità sono le stesse per entrambi i metodi, quindi scegli quello più adatto alla tua applicazione.
Entrambi i metodi sono descritti in maggiore dettaglio nella sezione seguente.
Aggiungere un frammento o una visualizzazione della mappa
Per creare una mappa per visualizzare l'avanzamento del viaggio utilizzando un frammento Android o una visualizzazione, segui questi passaggi e consulta gli esempi di codice.
Definisci un frammento o una visualizzazione nel file XML del layout dell'applicazione in
/res/layout
. Definisci la mappa del viaggio come frammento utilizzandoConsumerMapFragment
o come visualizzazione utilizzandoConsumerMapView
.Il frammento o la vista fornisce quindi l'accesso alla mappa del viaggio a cui la tua app può accedere e modificare. La mappa fornisce anche un handle per
ConsumerController
, che consente alla tua app di controllare e personalizzare l'esperienza del consumatore.Dal metodo
onCreate()
, chiamagetConsumerGoogleMapAsync(callback)
, che restituisceConsumerGoogleMap
in modo asincrono nel callback.Utilizza
ConsumerGoogleMap
per visualizzare l'avanzamento del viaggio e aggiornare in base alle esigenze.
Esempio di come aggiungere ConsumerMapFragment
Definisci il frammento nel file XML del layout dell'applicazione, come mostrato nel seguente esempio di codice.
<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" />
Esegui una chiamata a
getConsumerGoogleMapAsync()
dal metodoonCreate()
.
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()!!
}
}
)
}
}
Esempio di come aggiungere ConsumerMapView
Utilizza la visualizzazione in un frammento o in un'attività, come definito nel file 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" />
Effettua la chiamata a
getConsumerGoogleMapAsync()
daonCreate()
. Oltre al parametro di callback, includi i seguenti dettagli:L'attività o il frammento contenente. La classe di base dell'attività o del frammento deve essere rispettivamente
FragmentActivity
oFragment
, poiché forniscono l'accesso al relativo ciclo di vita.GoogleMapOptions
(che può essere nullo), contenente gli attributi di configurazione perMapView
.
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
in un frammento è uguale a quello dell'esempio precedente per MapView
in un'attività, tranne per il fatto che il frammento espande il layout che include MapView
nel metodo onCreateView()
del frammento.
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)
}
}
Passaggio 2: aggiungi il supporto per un livello base delle mappe e un controller di visualizzazione
Per condividere l'avanzamento del viaggio nella tua app, aggiungi le seguenti classi: ConsumerGoogleMap
e ConsumerController
.
Recupera
ConsumerGoogleMap
daConsumerMapFragment
oConsumerMapView
, che entrambi restituiscono in modo asincronoConsumerGoogleMap
inConsumerMapReadyCallback
.ConsumerGoogleMap
è una classe wrapper per la classeGoogleMap
. Utilizza un'API equivalente aGoogleMap
in modo che la tua app possa interagire con la mappa. In questo modo, la tua app può interagire senza problemi con la stessa mappa di Google di base. Ad esempio,GoogleMap
consente la registrazione di un solo callback, maConsumerGoogleMap
supporta due callback registrati. Questi callback consentono alla tua app di registrare callback chiamati in sequenza.Ricevi
ConsumerController
daConsumerGoogleMap
ingetConsumerController()
.ConsumerController
fornisce l'accesso alle funzionalità di condivisione dei viaggi, come monitorare i viaggi, controllare lo stato dei viaggi e impostare le posizioni.
Per scoprire come aggiungere ConsumerGoogleMap
e ConsumerController
alla tua app in Java e Kotlin, consulta gli esempi riportati di seguito.
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,
}
)
Passaggio 3: aggiungi il supporto delle immagini vettoriali Android
Se il design dell'app richiede il supporto delle immagini vettoriali, aggiungi il supporto per i dispositivi Android e gli elementi drawable vettoriali seguendo questa procedura:
- Aggiungi il seguente codice all'attività. Questi codici estendono
AppCompatActivity
per utilizzare gli elementi drawable vettoriali nell'SDK Consumer.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}