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 cho Android. Sau thêm bản đồ, bạn có thể thay đổi loại bản đồ và đối tượ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 hỗ trợ người dùng tương tác 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 thao tác nhập bằng cử chỉ của 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 vào để quản lý bản đồ cơ bản tính năng và dữ liệu 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 mảnh cho quản lý vòng đời của đối tượng GoogleMap.

  • MapView – Một chế độ 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:

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

Để dùng đối tượng GoogleMap trong ứng dụng, bạn phải sử dụng SupportMapFragment hoặc MapView làm đối tượng vùng chứa cho bản đồ và sau đó truy xuất đối tượng GoogleMap từ vùng chứa. Vì vùng chứa lớp xuất phát từ mảnh hoặc khung hiển thị Android, chúng cung cấp bản đồ với tính năng quản lý vòng đời và chức 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 một Đối tượng GoogleMap.

Xem mã

Mã sau đây lấy từ hoạt động Java đầy đủ được dùng trong chủ đề này khi thêm một mảnh theo phương thức tĩnh. Dự án Android được tạo từ dự án Empty (Trống) mẫu, sau đó được cập nhật dựa trên hướng dẫn cấu hình dự án. Sau khi thực hiện các bước trong chủ đề này, mã có thể khác tuỳ theo 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"));
      }
  }

Để thêm bản đồ

Phần này mô tả cách thêm một bản đồ cơ bản bằng cách sử dụng một mảnh làm bản đồ container; tuy nhiên, bạn vẫn có thể dùng khung hiển thị. Để biết ví dụ, hãy xem RawMapViewDemoActivity trên GitHub.

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

  1. Để tải SDK, hãy lấy khoá API và thêm các khung cần thiết, làm theo các bước trong:

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

    2. Sử dụng khoá 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 theo cách tĩnh hoặc động.

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

  4. Đặt tệp bố cục làm chế độ xem nội dung.

  5. Nếu bạn đã thêm mảnh theo cách tĩnh, hãy xử lý mảnh đó.

  6. Đăng ký lệnh gọi lại.

  7. Lấy một xử lý cho đố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 theo cách tĩnh hoặc động. Cách đơn giản nhất là thêm theo cách tĩnh. Nếu bạn thêm mảnh một cách linh động, bạn có thể thực hiện thêm thao tác trên mảnh, chẳng hạn như xoá và sẽ thay thế mã đó trong thời gian chạy.

Cách thêm mảnh theo cách tĩnh

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

  1. Thêm 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 sử dụng trong maps thuộc tính XML tuỳ chỉnh.
  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 rồi đặt thuộc tính đó thành R.id.map mã nhận dạng tài nguyên (@+id/map).

Ví dụ: dưới đâ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"/>

Cách thêm một mảnh một cách linh động

Trong hoạt động:

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

Ví dụ:

Kotlin



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

      

Java


SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .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:

Kotlin



class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Java


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

      

Thiết lập khung hiển thị 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 khung hiển thị nội dung.

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

Kotlin



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

      

Java


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

      

Lấy tên người dùng đối với mảnh và đăng ký lệnh gọi lại

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

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

Ví dụ: nếu bạn đã thêm mảnh theo cách tĩnh:

Kotlin



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

      

Java


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

      

Lấy một xử lý đối tượng GoogleMap

Sử dụng phương thức gọi lại onMapReady để xử lý 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. Lớp này cung cấp một thực thể 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 tên người dùng cho GoogleMap và sau đó một điểm đánh dấu được thêm vào bản đồ:

Kotlin



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

      

Java


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

      

Ảnh chụp màn hình bản đồ và điểm đánh dấu được căn giữa tại Đảo Null.

Khi bạn tạo và chạy thành công ứng dụng, ứng dụng sẽ cho thấy một bản đồ bằng đ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


Các 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 cài đặt bản đồ.