Para acompanhar uma viagem no seu app para consumidores, primeiro você precisa definir um mapa e adicionar suporte a mapas vetoriais, se necessário.
Para configurar um mapa no app, siga estas etapas:
- Definir um fragmento de mapa para acompanhar uma viagem.
- Adicionar suporte a uma camada de base do Maps e ao controlador de visualização.
- Adicione suporte a gráficos vetoriais do Android para mostrar mapas vetoriais, se necessário.
Depois de definir um mapa, você pode adicionar outras visualizações e controles de câmera para personalizar a experiência visual. Para mais detalhes, consulte Estilizar um mapa.
Etapa 1: definir um fragmento de mapa para acompanhar uma viagem
Para definir um mapa, adicione um fragmento ou uma visualização para criar o mapa em que você compartilha uma viagem sob demanda no app do consumidor. Para definir seu mapa, siga um destes métodos:
ConsumerMapFragment
: use para definir seu mapa com umFragment
.ConsumerMapView
: use para definir um mapa com umView
.
Os recursos são os mesmos para os dois métodos. Escolha qual é melhor para seu aplicativo.
Ambos os métodos são explicados em mais detalhes na seção a seguir.
Adicionar uma visualização ou um fragmento de mapa
Para criar um mapa que mostre o progresso da viagem usando um fragmento do Android ou uma visualização, siga estas etapas e consulte os exemplos de código.
Defina um fragmento ou uma visualização no arquivo XML de layout do aplicativo localizado em
/res/layout
. Defina o mapa de viagem como um fragmento usandoConsumerMapFragment
ou como uma visualização usandoConsumerMapView
.O fragmento ou a visualização fornece acesso ao mapa da viagem que o app pode acessar e modificar. O mapa também fornece um gerenciador para o
ConsumerController
, que permite ao app controlar e personalizar a experiência do consumidor.No método
onCreate()
, chamegetConsumerGoogleMapAsync(callback)
, que retorna oConsumerGoogleMap
de forma assíncrona no callback.Use
ConsumerGoogleMap
para mostrar o progresso da viagem e atualizar conforme necessário.
Exemplo de como adicionar ConsumerMapFragment
Defina o fragmento no arquivo XML do layout do aplicativo, conforme mostrado no exemplo de código abaixo.
<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" />
Faça uma chamada para
getConsumerGoogleMapAsync()
no métodoonCreate()
.
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()!!
}
}
)
}
}
Exemplo de como adicionar ConsumerMapView
Use a visualização em um fragmento ou em uma atividade, conforme definido no arquivo 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" />
Faça a chamada para
getConsumerGoogleMapAsync()
deonCreate()
. Além do parâmetro de callback, inclua os seguintes detalhes:A atividade ou o fragmento que contém. A classe base da atividade ou do fragmento precisa ser um
FragmentActivity
ou umFragment
de suporte (respectivamente), já que eles fornecem acesso ao ciclo de vida.GoogleMapOptions
(que pode ser nulo), contendo atributos de configuração para oMapView
.
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,
)
}
}
Um MapView
em um fragmento é o mesmo que o exemplo anterior para
MapView
em uma atividade, exceto que o fragmento infla o layout que
inclui o MapView
no método onCreateView()
do fragmento.
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)
}
}
Etapa 2: adicionar suporte a uma camada de base do Maps e ao controlador de visualização
Para compartilhar o andamento da viagem no app, adicione as
seguintes classes: ConsumerGoogleMap
e ConsumerController
.
Receba
ConsumerGoogleMap
deConsumerMapFragment
ouConsumerMapView
, que retornamConsumerGoogleMap
de forma assíncrona emConsumerMapReadyCallback
.ConsumerGoogleMap
é uma classe wrapper para a classeGoogleMap
. Ele usa uma API equivalente aGoogleMap
para que o app possa interagir com o mapa. Dessa forma, o app pode interagir perfeitamente com o mesmo mapa do Google. Por exemplo,GoogleMap
permite apenas um registro de callback, masConsumerGoogleMap
oferece suporte a dois callbacks registrados. Esses callbacks permitem que o app registre callbacks que são chamados sequencialmente.Receba
ConsumerController
deConsumerGoogleMap
emgetConsumerController()
.O
ConsumerController
dá acesso a recursos de compartilhamento de viagens, como monitorar viagens, controlar o status da viagem e definir locais.
Para saber como adicionar ConsumerGoogleMap
e ConsumerController
ao seu app em
Java e Kotlin, consulte os exemplos a seguir.
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,
}
)
Etapa 3: adicionar suporte a gráficos vetoriais do Android
Se o design do app exigir suporte a gráficos vetoriais, adicione suporte a dispositivos Android e drawables vetoriais seguindo estas etapas:
- Adicione o código abaixo à atividade. Esses códigos estendem
AppCompatActivity
para usar os drawables vetoriais no SDK do consumidor.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}