Aby śledzić przejazd w aplikacji dla konsumentów, musisz najpierw zdefiniować mapę i w razie potrzeby dodać obsługę map wektorowych.
Aby skonfigurować mapę w aplikacji:
- Określ fragment mapy, który ma śledzić podróż.
- Dodanie obsługi warstwy bazowej mapy i kontrolera widoku.
- W razie potrzeby dodaj obsługę grafiki wektorowej na Androidzie, aby wyświetlać mapy wektorowe.
Po zdefiniowaniu mapy możesz dodać dodatkowe widoki i sterowanie kamerą, aby dostosować wrażenia wizualne. Więcej informacji znajdziesz w artykule Stylizowanie mapy.
Krok 1. Określ fragment mapy, który ma śledzić podróż
Mapę definiujesz, dodając fragment lub widok mapy, aby utworzyć mapę, na której możesz udostępniać przejazd na żądanie w aplikacji konsumenckiej. Aby zdefiniować mapę, wykonaj jedną z tych czynności:
ConsumerMapFragment
: służy do definiowania mapy za pomocą elementuFragment
.ConsumerMapView
: służy do definiowania mapy zView
.
Funkcje są takie same w przypadku obu metod, więc wybierz tę, która lepiej pasuje do Twojej aplikacji.
Obie metody są szczegółowo opisane w następnej sekcji.
Dodawanie fragmentu mapy lub widoku
Aby utworzyć mapę wyświetlającą postęp podróży za pomocą fragmentu lub widoku Androida, wykonaj te czynności i zapoznaj się z przykładami kodu.
Zdefiniuj fragment lub widok w pliku XML układu aplikacji znajdującym się w folderze
/res/layout
. Zdefiniuj mapę podróży jako fragment za pomocą elementuConsumerMapFragment
lub jako widok za pomocą elementuConsumerMapView
.Fragment lub widok zapewnia wtedy dostęp do mapy podróży, do której Twoja aplikacja może mieć dostęp i którą może modyfikować. Mapa zawiera też uchwyt
ConsumerController
, który umożliwia aplikacji kontrolowanie i dostosowywanie wrażeń użytkowników.W metodzie
onCreate()
wywołajgetConsumerGoogleMapAsync(callback)
, która asynchronicznie zwracaConsumerGoogleMap
w wywołaniu zwrotnym.Użyj ikony
ConsumerGoogleMap
, aby wyświetlić postępy w podróży i w razie potrzeby je zaktualizować.
Przykład dodawania ConsumerMapFragment
Zdefiniuj fragment w pliku XML układu aplikacji, jak pokazano w tym przykładzie kodu.
<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" />
Zadzwoń do
getConsumerGoogleMapAsync()
za pomocą metodyonCreate()
.
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()!!
}
}
)
}
}
Przykład dodawania ConsumerMapView
Użyj widoku we fragmencie lub w aktywności zgodnie z definicją w pliku 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" />
Zadzwoń na numer
getConsumerGoogleMapAsync()
z numeruonCreate()
. Oprócz parametru wywołania zwrotnego podaj te informacje:Aktywność lub fragment, w którym się znajduje. Klasa bazowa aktywności lub fragmentu musi być odpowiednio
FragmentActivity
lubFragment
, ponieważ zapewniają one dostęp do cyklu życia.GoogleMapOptions
(który może mieć wartość null) zawierający atrybuty konfiguracjiMapView
.
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,
)
}
}
W przypadku fragmentu MapView
działa tak samo jak w poprzednim przykładzie dla MapView
w aktywności, z tym że fragment rozszerza układ, który zawiera MapView
w metodzie fragmentu onCreateView()
.
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)
}
}
Krok 2. Dodaj obsługę warstwy bazowej mapy i kontrolera widoku
Aby udostępniać postępy w podróży w aplikacji, dodaj do niej te klasy: ConsumerGoogleMap
i ConsumerController
.
Pobierz
ConsumerGoogleMap
zConsumerMapFragment
lubConsumerMapView
. Obie te funkcje asynchronicznie zwracająConsumerGoogleMap
wConsumerMapReadyCallback
.ConsumerGoogleMap
to klasa opakowująca klasęGoogleMap
. Korzysta z interfejsu API podobnego doGoogleMap
, dzięki czemu Twoja aplikacja może wchodzić w interakcje z mapą. W ten sposób aplikacja może bezproblemowo korzystać z tej samej mapy Google. Na przykładGoogleMap
umożliwia tylko jedną rejestrację wywołania zwrotnego, aleConsumerGoogleMap
obsługuje podwójne zarejestrowane wywołania zwrotne. Te wywołania zwrotne umożliwiają zarejestrowanie w aplikacji wywołań zwrotnych, które są wywoływane kolejno.ConsumerController
zConsumerGoogleMap
wgetConsumerController()
ConsumerController
zapewnia dostęp do funkcji udostępniania przejazdów, takich jak monitorowanie przejazdów, kontrolowanie ich stanu i ustawianie lokalizacji.
Przykłady dodawania wywołań ConsumerGoogleMap
i ConsumerController
do aplikacji w językach Java i Kotlin znajdziesz poniżej.
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,
}
)
Krok 3. Dodaj obsługę grafiki wektorowej na Androidzie
Jeśli projekt aplikacji wymaga obsługi grafiki wektorowej, dodaj obsługę urządzeń z Androidem i rysunków wektorowych, wykonując te czynności:
- Dodaj ten kod do aktywności. Ten kod rozszerza
AppCompatActivity
możliwość używania rysunków wektorowych w pakiecie SDK dla konsumentów.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}
Co dalej
Śledzenie podróży na Androidzie