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 và tính năng bản đồ.
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ợ 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 hoạt động đầu vào của người dùng từ 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ượngGoogleMap
sau khi đối tượng đó được truy xuất từ đối tượngSupportMapFragment
hoặcMapView
.SupportMapFragment
– Một phân mảnh để quản lý vòng đời của một đối tượngGoogleMap
.MapView
— Một thành phần hiển thị để quản lý vòng đời của một đối tượngGoogleMap
.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 đối với đối tượngGoogleMap
.
Đố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 các ô bản đồ xuống.
- Hiện ô trên màn hình thiết bị.
- Hiển thị các điều khiển khác nhau như xoay 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ỏ.
Để 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 đồ và sau đó 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 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.
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 là từ hoạt động Java đầy đủ 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 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")); } }
Để 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ị. Ví dụ: xem RawMapViewdemoActivity trên GitHub.
Các bước cơ bản:
Để tải 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:
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 phương thức tĩnh hoặc động.Triển khai giao diện
OnMapReadyCallback
.Đặt tệp bố cục làm chế độ xem nội dung.
Nếu bạn đã thêm mảnh tĩnh tĩnh, hãy xử lý mảnh đó.
Đăng ký hàm gọi lại.
Tạo tên người dùng 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 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 tĩnh
Trong tệp bố cục của hoạt động sẽ xử lý bản đồ:
- Thêm một phần tử
fragment
. - 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 thuộc tính XML tùy chỉnh củamaps
. - Trong phần tử
fragment
, hãy đặt thuộc tínhandroid:name
thànhcom.google.android.gms.maps.SupportMapFragment
. - Trong phần tử
fragment
, hãy thêm thuộc tínhandroid:id
và đặt thuộc tính đó 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"/>
Cách tự động thêm một mảnh
Trong hoạt động:
- Tạo một thực thể của
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 Giao dịch phân 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 chế độ xem 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
Để xử lý mảnh, hãy gọi phương thức
FragmentManager.findFragmentById
và truyền mã nhận dạng tài nguyên của mảnh trong tệp bố cục. Nếu bạn đã tự động thêm mảnh, hãy bỏ qua bước này vì bạn đã truy xuất ô điều khiển đó.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 tĩ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)
Tạo tên người dùng cho đối tượng GoogleMap
Hãy 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. Công 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
truy xuất ô điều khiển đến đối tượng GoogleMap
và sau đó điể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") ) }
Khi bạn tạo và chạy thành công ứng dụng, ứng dụng sẽ hiển thị bản đồ có điểm đánh dấu trên Đảo Null (vĩ độ không và kinh độ bằng 0).
Xem mã cho hoạt động hoàn chỉnh:
Các bước tiếp theo
Sau khi hoàn thành các bước này, bạn có thể định cấu hình tùy chọn cài đặt bản đồ.