Chủ đề này mô tả cách thêm một 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 Maps SDK cho Android. Sau khi thêm bản đồ, bạn có thể thay đổi loại bản đồ và các đối tượng.
Tổng quan
Maps SDK dành cho Android cung cấp một số lớp mà ứng dụng của bạn có thể 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ợ hoạt động 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ư thiết lập trạng thái ban đầu của bản đồ và phản hồi hoạt động nhập bằng cử chỉ của người dùng trong thời gian chạy.
Giao diện và các lớp chính để xử lý bản đồ:
GoogleMap– Điểm truy cập để quản lý các tính năng và dữ liệu cơ bản của bản đồ. Ứng dụng của bạn chỉ có thể truy cập vào đối tượngGoogleMapsau khi đối tượng này được truy xuất từ đối tượngSupportMapFragmenthoặcMapView.SupportMapFragment– Một mảnh để quản lý vòng đời của một đối tượngGoogleMap.MapView– Một khung hiển thị để quản lý vòng đời của một đối tượngGoogleMap.OnMapReadyCallback– Một 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ượngGoogleMap.
Đối tượng GoogleMap sẽ 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 các ô bản đồ xuống.
- Hiển thị các ô trên màn hình thiết bị.
- Hiển thị nhiều chế độ kiểm soát 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 chứa cho bản đồ, sau đó truy xuất đối tượng GoogleMap từ vùng chứa. Vì các lớp chứa bắt nguồn từ một đoạn mã hoặc chế độ xem Android nên chúng cung cấp cho bản đồ khả năng quản lý vòng đời và giao diện người dùng của các lớp cơ sở Android của chúng.
Lớp SupportMapFragment là vùng chứa hiện đại và phổ biến hơn cho đối tượng GoogleMap.
Xem mã
Đoạn mã sau đây được trích từ hoạt động Java đầy đủ được sử dụng trong chủ đề này khi thêm một đoạn mã tĩnh. Dự án Android được tạo từ mẫu dự án Empty, 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ủa bạn có thể khác nhau tùy 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")); } }
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 đoạn mã làm vùng chứa bản đồ; tuy nhiên, bạn có thể sử dụng chế độ xem thay thế. Để biết ví dụ, hãy xem RawMapViewDemoActivity trên Github.
Các bước cơ bản:
Để lấy SDK, lấy khóa API và thêm các khung cần thiết, hãy làm theo các bước sau:
Thêm một đối tượng
SupportMapFragmentvà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.Triển khai giao diện
OnMapReadyCallback.Đặt tệp bố cục làm dạng xem nội dung.
Nếu bạn đã thêm đoạn mã một cách tĩnh, hãy tạo một xử lý cho đoạn mã đó.
Đăng ký cuộc gọi lại.
Nhận 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 của mình một cách tĩnh hoặc động.
Cách đơn giản nhất là thêm một cách tĩnh. Nếu thêm mảnh một cách linh động, 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 theo cách tĩnh
Trong tệp bố cục của hoạt động sẽ xử lý bản đồ:
- Thêm phần tử
fragment. - Thêm khai báo tên
xmlns:map="http://schemas.android.com/apk/res-auto". Điều này cho phép sử dụngmapscác thuộc tính XML tuỳ chỉnh. - Trong phần tử
fragment, hãy đặt thuộc tínhandroid:namethànhcom.google.android.gms.maps.SupportMapFragment. - Trong phần tử
fragment, hãy thêm thuộc tínhandroid:idrồi đặt thành mã nhận dạng 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 một 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 theo cách linh động
Trong hoạt động:
- Tạo một thực thể
SupportMapFragment. - Xác nhận một giao dịch thêm mảnh vào hoạt động. Để biết thêm thông tin, hãy xem phần Giao dịch đối với 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 nội dung khai báo hoạt động như sau:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Đặt 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 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 một đối tượng tham chiếu đến mảnh và đăng ký lệnh gọi lại
Để lấy một đối tượng xử lý đến mảnh, hãy gọi phương thức
FragmentManager.findFragmentByIdrồi truyền mã nhận dạng tài nguyên của mảnh đó vào tệp bố cục. Nếu bạn đã thêm mảnh một cách linh động, hãy bỏ qua bước này vì bạn đã truy xuất được giá trị nhận dạng.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 mảnh một 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 đối tượng GoogleMap
Sử dụng phương thức gọi lại onMapReady để lấy một đối tượng GoogleMap. Lệnh gọi lại được kích hoạt khi bản đồ sẵn sàng nhận dữ liệu đầu vào của người dùng. Thao tác này cung cấp một thực thể không rỗng của lớp GoogleMap mà bạn có thể dùng để cập nhật bản đồ.
Trong ví dụ này, lệnh gọi lại onMapReady sẽ truy xuất một giá trị nhận dạng cho đối tượng GoogleMap, sau đó một điểm đánh dấu sẽ đượ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")); }

Khi bạn tạo và chạy ứng dụng 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ĩ độ bằng 0 và kinh độ bằng 0).
Xem mã cho hoạt động hoàn chỉnh:
Bước tiếp theo
Sau khi hoàn tất các bước này, bạn có thể thiết lập chế độ cài đặt bản đồ.