Para acompanhar uma viagem no seu app para o consumidor, primeiro você precisa definir um mapa e adicionar suporte para mapas vetoriais, se necessário.
Para configurar um mapa no seu app, siga estas etapas:
- Definir um fragmento de mapa para compartilhar a jornada.
- Adicionar suporte a uma camada base de mapas e a um controlador de visualização.
- Adicionar suporte a gráficos vetoriais do Android para mostrar imagens vetoriais mapas, se necessário.
Depois de definir um mapa, você pode adicionar outras visualizações e câmeras controles nos quais você deseja personalizar a experiência visual. Para mais detalhes, consulte Estilizar um mapa.
Etapa 1: definir um fragmento de mapa para compartilhamento da jornada
Você define um mapa adicionando um fragmento ou uma visualização para criar o mapa onde você compartilha uma viagem sob demanda no seu app para o consumidor. Para definir seu mapa, siga um destes métodos:
ConsumerMapFragment
: use para definir o mapa com umFragment
.ConsumerMapView
: use para definir um mapa com umView
.
Os recursos são os mesmos para os dois métodos, então escolha qual método é melhor para seu aplicativo.
Os dois métodos são explicados com mais detalhes na próxima seção.
Adicionar uma visualização ou um fragmento de mapa
Para criar um mapa para exibir o andamento da viagem usando um fragmento ou uma visualização do Android, siga estas etapas e consulte o 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 compartilhamento da jornada como um fragmento usando oConsumerMapFragment
ou como uma visualização usandoConsumerMapView
.O fragmento ou visualização fornece acesso à jornada. mapa de compartilhamento que seu aplicativo pode acessar e modificar. O mapa também fornece uma o alça até o
ConsumerController
, que permite que o app controle e personalizar a experiência de compartilhamento de jornadas.No método
onCreate()
, chamegetConsumerGoogleMapAsync(callback)
, que retornaConsumerGoogleMap
de forma assíncrona na chamada de retorno.Use o
ConsumerGoogleMap
para exibir o progresso da viagem e atualizar conforme necessário.
Exemplo de como adicionar ConsumerMapFragment
Defina o fragmento no arquivo XML de layout do aplicativo, conforme mostrado em o exemplo de código a seguir.
<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()
noonCreate()
.
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 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 de
onCreate()
paragetConsumerGoogleMapAsync()
. Em Além do parâmetro de callback, inclua os seguintes detalhes:A atividade ou fragmento que o contém. Base de atividade ou fragmento A classe precisa ser
FragmentActivity
ou umFragment
de suporte (respectivamente), já que dão acesso ao ciclo de vida.GoogleMapOptions
(que pode ser nulo), contendo a 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 do 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 base de mapas e ao controlador de visualização
Para ativar o compartilhamento de viagens no app, adicione o
seguintes classes para seu app: ConsumerGoogleMap
e ConsumerController
.
Receba
ConsumerGoogleMap
doConsumerMapFragment
ouConsumerMapView
, que retornam de forma assíncrona.ConsumerGoogleMap
emConsumerMapReadyCallback
.ConsumerGoogleMap
é uma classe de wrapper para a classeGoogleMap
. Ele usa uma API equivalente aGoogleMap
para que seu app possa interagir com o mapa. Dessa forma, seu aplicativo pode interagir perfeitamente com as mesmas mapa. Por exemplo,GoogleMap
permite apenas um único registro de callback, masConsumerGoogleMap
oferece suporte a callbacks registrados duplos. Esses callbacks permitem o app registra callbacks que são chamados sequencialmente.Receba
ConsumerController
deConsumerGoogleMap
nogetConsumerController()
.O
ConsumerController
fornece acesso a recursos de compartilhamento de jornada, como monitorar viagens, controlar o status de viagens e definir locais.
Para adicionar ConsumerGoogleMap
e ConsumerController
ao app em
Java e Kotlin, consulte os exemplos abaixo.
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 seu aplicativo exigir compatibilidade com gráficos vetoriais, adicione suporte para Dispositivos Android e drawables vetoriais seguindo estas etapas:
- Adicione o código a seguir à sua atividade. Esse código se estende
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() {
// ...
}