Bản phát hành 11.2.0 của SDK Dịch vụ Google Play bao gồm một cách mới để truy cập vào SDK Địa điểm dành cho Android. Ứng dụng GoogleApi
dễ sử dụng hơn so với phiên bản trước (GoogleApiClient
) vì ứng dụng này tự động quản lý các kết nối với Dịch vụ Google Play. Điều này làm giảm số lượng mã nguyên mẫu trong ứng dụng và có thể giúp loại bỏ nhiều lỗi phổ biến. API mới có một số điểm cải tiến:
- Quá trình kết nối được quản lý tự động nên API mới ít phải tốn nhiều công sức triển khai hơn.
- Các lệnh gọi API hiện sẽ tự động chờ thiết lập kết nối dịch vụ, giúp bạn không cần phải đợi
onConnected
trước khi đưa ra yêu cầu. - API Tasks giúp bạn dễ dàng soạn các thao tác không đồng bộ.
- Mã này độc lập và có thể dễ dàng di chuyển vào lớp tiện ích dùng chung hoặc lớp tương tự.
Việc cập nhật ứng dụng để sử dụng ứng dụng GoogleApi
yêu cầu một số thay đổi đối với cách triển khai SDK Địa điểm dành cho Android. Hướng dẫn này mô tả các thay đổi đối với SDK Địa điểm dành cho Android, đồng thời đề xuất các bước nên thực hiện khi cập nhật ứng dụng để dùng ứng dụng mới.
Tổng quan
Sau đây là các khía cạnh thay đổi chính:
- Có hai điểm truy cập mới:
GeoDataClient
vàPlaceDetectionClient
. Thay vì tạo một thực thểGoogleApiClient
để bao gồm tất cả các API, giờ đây, ứng dụng phải tạo thực thể cho cảGeoDataClient
vàPlaceDetectionClient
. - Vì các lệnh gọi lại kết nối không còn cần thiết nữa, nên bạn có thể tái cấu trúc ứng dụng một cách an toàn để xoá các lệnh gọi lại đó.
- Các phương thức mới của Places API hiện không đồng bộ và trả về
Task
thay vìPendingResult
.
Tải Places API
Để tải Places API, hãy khai báo các điểm truy cập, sau đó tạo thực thể cho các ứng dụng khách trong phương thức onCreate() của mảnh hoặc hoạt động của bạn như minh hoạ trong ví dụ sau:
// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Construct a GeoDataClient.
mGeoDataClient = Places.getGeoDataClient(this, null);
// Construct a PlaceDetectionClient.
mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);
Phép so sánh
Các phương thức mới của Places API hiện không đồng bộ và trả về Task
thay vì PendingResult
. Cấu trúc dữ liệu không thay đổi, vì vậy, bạn không cần cập nhật mã hiện có để xử lý kết quả.
Các mã ví dụ sau đây so sánh phiên bản mới và phiên bản cũ của GetCurrentPlace()
:
Cách mới
Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null); placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() { @Override public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) { PlaceLikelihoodBufferResponse likelyPlaces = task.getResult(); for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
Lối cũ
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi .getCurrentPlace(mGoogleApiClient, null); result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { @Override public void onResult(PlaceLikelihoodBuffer likelyPlaces) { for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });
Tìm hiểu thêm
Tìm hiểu thêm về cách truy cập API của Google.