Aby śledzić podróż w aplikacji użytkownika, musisz najpierw zdefiniować mapę i w razie potrzeby dodać obsługę map wektorowych.
Aby skonfigurować mapę w aplikacji:
- Zdefiniuj fragment mapy, aby śledzić podróż.
- Dodaj obsługę warstwy podstawowej map i kontrolera widoku.
- W razie potrzeby dodaj obsługę grafiki wektorowej w Androidzie, aby wyświetlać mapy wektorowe.
Po zdefiniowaniu mapy możesz dodać dodatkowe widoki i elementy sterujące kamerą, aby dostosować wygląd. Więcej informacji znajdziesz w artykule o stylizowaniu mapy. Zobacz Style a map.
Krok 1. Zdefiniuj fragment mapy, aby śledzić podróż
Mapę definiujesz, dodając fragment mapy lub widok, aby utworzyć mapę, na której udostępniasz podróż na żądanie w aplikacji użytkownika. Aby zdefiniować mapę, wykonaj jedną z tych czynności:
ConsumerMapFragment: użyj, aby zdefiniować mapę za pomocąFragment.ConsumerMapView: użyj, aby zdefiniować mapę za pomocąView.
Funkcje są takie same w obu metodach, 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ę do wyświetlania postępów w 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 katalogu
/res/layout. Zdefiniuj mapę podróży jako fragment za pomocąConsumerMapFragmentlub jako widok za pomocąConsumerMapView.Fragment lub widok zapewnia dostęp do mapy podróży, do której aplikacja może uzyskać dostęp i którą może modyfikować. Mapa zapewnia też dostęp do
ConsumerController, który umożliwia aplikacji kontrolowanie i dostosowywanie wrażeń użytkownika.W metodzie
onCreate()wywołajgetConsumerGoogleMapAsync(callback), która asynchronicznie zwracaConsumerGoogleMapw wywołaniu zwrotnym.Użyj
ConsumerGoogleMap, aby wyświetlać postępy w podróży i w razie potrzeby je aktualizować.
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" />Wywołaj
getConsumerGoogleMapAsync()z 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" />Wywołaj
getConsumerGoogleMapAsync()zonCreate(). Oprócz parametru wywołania zwrotnego podaj te informacje:Aktywność lub fragment zawierający. Klasa bazowa aktywności lub fragmentu musi być odpowiednio
FragmentActivitylubFragmentz biblioteki pomocy, ponieważ zapewniają one dostęp do cyklu życia.GoogleMapOptions(może być 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,
)
}
}
MapView we fragmencie jest taka sama jak w poprzednim przykładzie MapView w aktywności, z tą różnicą, że fragment rozszerza układ, który zawiera MapView w metodzie onCreateView() fragmentu.
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 podstawowej map i kontrolera widoku
Aby udostępniać postępy w podróży w aplikacji, dodaj do niej te klasy: ConsumerGoogleMap i ConsumerController.
Pobierz
ConsumerGoogleMapzConsumerMapFragmentlubConsumerMapView. Oba te elementy asynchronicznie zwracająConsumerGoogleMapwConsumerMapReadyCallback.ConsumerGoogleMapto klasa opakowująca klasęGoogleMap. Używa interfejsu API równoważnego zGoogleMap, dzięki czemu aplikacja może wchodzić w interakcję z mapą. W ten sposób aplikacja może bezproblemowo wchodzić w interakcję z tą samą mapą Google. Na przykładGoogleMapumożliwia tylko jedną rejestrację wywołania zwrotnego, aleConsumerGoogleMapobsługuje podwójne zarejestrowane wywołania zwrotne. Te wywołania zwrotne umożliwiają aplikacji rejestrowanie wywołań zwrotnych, które są wywoływane sekwencyjnie.Pobierz
ConsumerControllerzConsumerGoogleMapwgetConsumerController().ConsumerControllerzapewnia dostęp do funkcji udostępniania podróży, takich jak monitorowanie podróży, kontrolowanie stanu podróży i ustawianie lokalizacji.
Aby dowiedzieć się, jak dodać ConsumerGoogleMap i ConsumerController do aplikacji w językach Java i Kotlin, zapoznaj się z tymi przykładami.
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 w Androidzie
Jeśli projekt aplikacji wymaga obsługi grafiki wektorowej, wykonaj te czynności, aby dodać obsługę urządzeń z Androidem i grafiki wektorowej:
- Dodaj ten kod do aktywności. Ten kod rozszerza
AppCompatActivity, aby używać grafiki wektorowej 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() {
// ...
}
Przyszłe
Śledzenie podróży w Androidzie