Thêm bản đồ

Chọn nền tảng: Android iOS JavaScript

Chủ đề này mô tả cách thêm bản đồ cơ bản vào ứng dụng Android sau khi bạn đã định cấu hình dự án để sử dụng SDK Maps dành cho Android. Sau khi thêm bản đồ, bạn có thể thay đổi loại bản đồ và tính năng.

Tổng quan

SDK bản đồ dành cho Android cung cấp một số lớp mà ứng dụng của bạn có thể sử dụng để quản lý vòng đời, chức năng và dữ liệu của bản đồ. Các lớp này hỗ trợ tương tác của người dùng dựa trên mô hình giao diện người dùng Android, chẳng hạn như đặt trạng thái ban đầu của bản đồ và phản hồi hoạt động đầu vào của cử chỉ từ người dùng trong thời gian chạy.

Giao diện chính và các lớp để xử lý bản đồ:

  • GoogleMap — Điểm truy cập để quản lý dữ liệu và các tính năng cơ bản của bản đồ. Ứng dụng của bạn chỉ có thể truy cập vào đối tượng GoogleMap sau khi được truy xuất từ đối tượng SupportMapFragment hoặc MapView.

  • SupportMapFragment – Một phân mảnh để quản lý vòng đời của một đối tượng GoogleMap.

  • MapViewChế độ xem để quản lý vòng đời của một đối tượng GoogleMap.

  • OnMapReadyCallback – Giao diện gọi lại xử lý các sự kiện và hoạt động tương tác của người dùng cho đối tượng GoogleMap.

Đối tượng GoogleMap tự động thực hiện các thao tác sau:

  • Đang kết nối với dịch vụ Google Maps.
  • Đang tải thẻ thông tin bản đồ xuống.
  • Hiển thị các ô trên màn hình thiết bị.
  • Hiển thị nhiều chế độ điều khiển như xoay và thu phóng.
  • Phản hồi các cử chỉ kéo và thu phóng bằng cách di chuyển bản đồ và phóng to hoặc thu nhỏ.

Để sử dụng đối tượng GoogleMap trong ứng dụng, bạn phải sử dụng đối tượng SupportMapFragment hoặc MapView làm đối tượng vùng chứa cho bản đồ rồi truy xuất đối tượng GoogleMap từ vùng chứa. Vì các lớp vùng chứa bắt nguồn từ một mảnh hoặc thành phần hiển thị Android, nên các lớp này sẽ cung cấp cho bản đồ khả năng quản lý vòng đời và khả năng giao diện người dùng của các lớp cơ sở Android. Lớp SupportMapFragment là vùng chứa hiện đại và phổ biến hơn cho đối tượng GoogleMap.

Xem mã

Mã sau đây được lấy từ hoạt động Java đầy đủ được dùng trong chủ đề này khi thêm một mảnh tĩnh. Dự án Android được tạo từ mẫu Dự án trống, sau đó cập nhật dựa trên hướng dẫn về cấu hình dự án. Sau khi thực hiện các bước trong chủ đề này, mã của bạn có thể khác nhau dựa trên mẫu dự án.

  package com.example.mapsetup;

  import androidx.appcompat.app.AppCompatActivity;

  import android.os.Bundle;

  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.OnMapReadyCallback;
  import com.google.android.gms.maps.SupportMapFragment;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.MarkerOptions;

  // Implement OnMapReadyCallback.
  public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Set the layout file as the content view.
          setContentView(R.layout.activity_main);

          // Get a handle to the fragment and register the callback.
          SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                  .findFragmentById(R.id.map);
          mapFragment.getMapAsync(this);

      }

      // Get a handle to the GoogleMap object and display marker.
      @Override
      public void onMapReady(GoogleMap googleMap) {
          googleMap.addMarker(new MarkerOptions()
                  .position(new LatLng(0, 0))
                  .title("Marker"));
      }
  }

Cách thêm bản đồ

Phần này mô tả cách thêm bản đồ cơ bản bằng cách sử dụng một mảnh làm vùng chứa bản đồ; tuy nhiên, bạn có thể sử dụng một thành phần hiển thị thay thế. Ví dụ: xem RawMapViewdemoActivity trên GitHub.

Các bước cơ bản:

  1. Để lấy SDK, lấy khoá API và thêm các khung bắt buộc, hãy làm theo các bước trong:

    1. Thiết lập trong Google Cloud Console

    2. Sử dụng khóa API

    3. Thiết lập dự án Android Studio

  2. Thêm đối tượng SupportMapFragment vào hoạt động sẽ xử lý bản đồ. Bạn có thể thêm mảnh (static) hoặc động.

  3. Triển khai giao diện OnMapReadyCallback.

  4. Đặt tệp bố cục làm thành phần hiển thị nội dung.

  5. Nếu bạn thêm tĩnh mảnh, hãy xử lý mảnh ngay.

  6. Đăng ký hàm gọi lại.

  7. Xử lý đối tượng GoogleMap.

Thêm đối tượng SupportMapFragment

Bạn có thể thêm đối tượng SupportMapFragment vào ứng dụng của mình theo cách tĩnh hoặc động. Cách đơn giản nhất là thêm tĩnh. Nếu tự động thêm mảnh, bạn có thể thực hiện các thao tác khác trên mảnh, chẳng hạn như xoá và thay thế mảnh trong thời gian chạy.

Cách thêm một mảnh tĩnh

Trong tệp bố cục của hoạt động sẽ xử lý bản đồ:

  1. Thêm một phần tử fragment.
  2. Thêm phần khai báo tên xmlns:map="http://schemas.android.com/apk/res-auto". Điều này cho phép việc sử dụng các thuộc tính XML tùy chỉnh maps.
  3. Trong phần tử fragment, hãy đặt thuộc tính android:name thành com.google.android.gms.maps.SupportMapFragment.
  4. Trong phần tử fragment, hãy thêm thuộc tính android:id và thiết lập thành mã tài nguyên R.id.map (@+id/map).

Ví dụ: sau đây là một tệp bố cục hoàn chỉnh bao gồm phần tử fragment:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Để tự động thêm một mảnh

Trong hoạt động:

  1. Tạo một thực thể SupportMapFragment.
  2. Xác nhận giao dịch thêm mảnh vào hoạt động. Để biết thêm thông tin, hãy xem bài viết Giao dịch mảnh.

Ví dụ:

Java


SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit();

      

Kotlin


val mapFragment = SupportMapFragment.newInstance()
supportFragmentManager
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit()

      

Triển khai giao diện OnMapReadyCallback

Cập nhật phần khai báo hoạt động như sau:

Java


class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // ...
}

      

Kotlin


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Thiết lập chế độ xem nội dung

Trong phương thức onCreate của hoạt động, hãy gọi phương thức setContentView và đặt tệp bố cục làm thành phần hiển thị nội dung.

Ví dụ: nếu tệp bố cục có tên là main.xml:

Java


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

      

Kotlin


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
}

      

Xử lý mảnh và đăng ký lệnh gọi lại

  1. Để xử lý mảnh, hãy gọi phương thức FragmentManager.findFragmentById và truyền vào mã nhận dạng tài nguyên của mảnh trong tệp bố cục của bạn. Nếu bạn đã thêm mảnh này một cách linh động, hãy bỏ qua bước này vì bạn đã truy xuất ô điều khiển đó.

  2. Gọi phương thức getMapAsync để đặt lệnh gọi lại trên mảnh.

Ví dụ: nếu bạn thêm tĩnh mảnh:

Java


SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

      

Kotlin


val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

Xử lý đối tượng GoogleMap

Sử dụng phương thức gọi lại onMapReady để xử lý đối tượng GoogleMap. Lệnh gọi lại được kích hoạt khi bản đồ sẵn sàng nhận hoạt động đầu vào của người dùng. Nó cung cấp một bản sao không rỗng của lớp GoogleMap mà bạn có thể sử dụng để cập nhật bản đồ.

Trong ví dụ này, lệnh gọi lại onMapReady truy xuất một ô điều khiển đối tượng GoogleMap rồi thêm một mã đánh dấu được thêm vào bản đồ:

Java


@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker"));
}

      

Kotlin


override fun onMapReady(googleMap: GoogleMap) {
    googleMap.addMarker(
        MarkerOptions()
            .position(LatLng(0.0, 0.0))
            .title("Marker")
    )
}

      

Ảnh chụp màn hình có bản đồ và điểm đánh dấu tập trung vào Đảo Null.

Khi bạn tạo và chạy thành công, ứng dụng sẽ hiển thị một bản đồ có điểm đánh dấu trên Đảo Null (vĩ độ 0 và kinh độ 0 độ).

Xem mã cho hoạt động hoàn chỉnh:

Xem Hoàn tất hoạt động


Bước tiếp theo

Sau khi hoàn tất các bước này, bạn có thể định cấu hình chế độ cài đặt bản đồ.