Konfigurowanie mapy

Wybierz platformę: Android iOS

Aby śledzić przejazd w aplikacji użytkownika, musisz najpierw zdefiniować mapę i w razie potrzeby dodać obsługę map wektorowych.

Aby skonfigurować mapę w aplikacji:

  1. Zdefiniuj fragment mapy, aby śledzić podróż.
  2. Dodaj obsługę warstwy podstawowej map i kontrolera widoku.
  3. 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ć wrażenia wizualne. 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 przejazd 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.

Dodaj fragment mapy lub widok

Aby utworzyć mapę, na której będzie wyświetlany postęp podróży za pomocą fragmentu lub widoku Androida, wykonaj te czynności i zapoznaj się z przykładami kodu.

  1. Zdefiniuj fragment lub widok w pliku XML układu aplikacji znajdującym się w /res/layout. Zdefiniuj mapę podróży jako fragment za pomocą ConsumerMapFragment lub 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.

  2. W metodzie onCreate() wywołaj getConsumerGoogleMapAsync(callback), która asynchronicznie zwraca ConsumerGoogleMap w wywołaniu zwrotnym.

  3. Użyj ConsumerGoogleMap, aby wyświetlać postęp podróży i w razie potrzeby go aktualizować.

Przykład dodawania ConsumerMapFragment

  1. 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" />
    
  2. Wywołaj getConsumerGoogleMapAsync() z metody onCreate().

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

  1. 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" />
    
  2. Wywołaj getConsumerGoogleMapAsync() z onCreate(). Oprócz parametru wywołania zwrotnego podaj te informacje:

    • Aktywność lub fragment zawierający. Klasa bazowa aktywności lub fragmentu musi być odpowiednio FragmentActivity lub Fragment z biblioteki pomocy, ponieważ zapewniają one dostęp do cyklu życia.

    • GoogleMapOptions (może być null), zawierający atrybuty konfiguracji MapView.

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ęp podróży w aplikacji, dodaj do niej te klasy: ConsumerGoogleMap i ConsumerController.

  • Pobierz ConsumerGoogleMap z ConsumerMapFragment lub ConsumerMapView. Oba te elementy asynchronicznie zwracają ConsumerGoogleMap w ConsumerMapReadyCallback.

    ConsumerGoogleMap to klasa opakowująca klasę GoogleMap. Używa interfejsu API równoważnego z GoogleMap, aby aplikacja mogła wchodzić w interakcję z mapą. Dzięki temu aplikacja może bezproblemowo wchodzić w interakcję z tą samą mapą Google. Na przykład GoogleMap umożliwia tylko jedną rejestrację wywołania zwrotnego, ale ConsumerGoogleMap obsł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 ConsumerController z ConsumerGoogleMap w getConsumerController().

    ConsumerController zapewnia 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 Javie i Kotlinie, 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 obiektów rysowalnych wektorowo:

  1. Dodaj ten kod do aktywności. Ten kod rozszerza AppCompatActivity, aby używać obiektów rysowalnych wektorowo 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 w Androidzie

Stylizowanie mapy