Địa điểm hiện tại

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

Khi sử dụng SDK Địa điểm dành cho Android, bạn có thể khám phá địa điểm tại vị trí đang được báo cáo của thiết bị. Ví dụ về địa điểm: địa phương doanh nghiệp, địa điểm ưa thích và vị trí địa lý.

Quyền

Để sử dụng thư viện, bạn không cần phải khai báo thêm quyền nào trong tệp kê khai của ứng dụng. vì thư viện khai báo mọi quyền mà thư viện dùng trong tệp kê khai. Tuy nhiên, nếu ứng dụng của bạn sử dụng PlacesClient.findCurrentPlace()! bạn phải yêu cầu quyền truy cập thông tin vị trí trong thời gian chạy.

Nếu ứng dụng của bạn không sử dụng PlacesClient.findCurrentPlace(), hãy thể hiện rõ việc xoá Ra mắt các quyền ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION bằng cách thêm đoạn mã sau vào tệp kê khai:

<manifest ... xmlns:tools="http://schemas.android.com/tools">
    ...
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
    ...
</manifest>

Đọc thêm về và cân nhắc việc sử dụng EasyPermissions để bắt đầu.

Lấy thông tin vị trí hiện tại

Để tìm doanh nghiệp địa phương hoặc địa điểm khác mà bạn đang dùng thiết bị , hãy làm theo các bước sau:

  1. Gọi ContextCompat.checkSelfPermission để kiểm tra xem người dùng đã cấp quyền truy cập vào thiết bị của họ hay chưa vị trí. Ứng dụng của bạn cũng phải bao gồm mã để nhắc người dùng cấp quyền, và xử lý kết quả. Xem phần Yêu cầu quyền cho ứng dụng để biết thông tin chi tiết.
  2. Tạo một FindCurrentPlaceRequest, truyền List trong số Place.Fields, chỉ định phương thức loại dữ liệu địa điểm mà ứng dụng của bạn sẽ yêu cầu.
  3. Gọi PlacesClient.findCurrentPlace(), truyền FindCurrentPlaceRequest mà bạn đã tạo ở trước .
  4. Lấy danh sách các PlaceLikelihood từ FindCurrentPlaceResponse.

Các trường tương ứng với kết quả Tìm kiếm địa điểm và được chia thành ba loại thanh toán: Cơ bản, liên lạc và Bầu không khí. Các trường cơ bản được tính phí theo mức cơ bản và không phát sinh thêm các khoản phí. Các trường Địa chỉ liên hệ và Bầu không khí có mức phí cao hơn. Thông tin khác về cách lập hoá đơn cho các yêu cầu dữ liệu địa điểm, hãy xem Mức sử dụng và thanh toán.

API trả về một FindCurrentPlaceResponse theo phong cách Task. FindCurrentPlaceResponse chứa danh sách PlaceLikelihood các đối tượng đại diện cho những địa điểm có khả năng đang đặt thiết bị. Để mỗi vị trí, kết quả bao gồm một chỉ báo về khả năng là nơi phù hợp. Danh sách này có thể trống, nếu không có địa điểm đã biết tương ứng với vị trí thiết bị đã cho.

Bạn có thể gọi PlaceLikelihood.getPlace() để truy xuất một Place đối tượng và PlaceLikelihood.getLikelihood() để xem xếp hạng khả năng xảy ra cho địa điểm đó. Giá trị càng cao thì giá trị càng cao xác suất địa điểm phù hợp nhất.

Mã mẫu sau đây truy xuất danh sách các vị trí có thiết bị có nhiều khả năng ở đó nhất và ghi lại tên cũng như khả năng xảy ra cho mỗi địa điểm.

Kotlin



// Use fields to define the data types to return.
val placeFields: List<Place.Field> = listOf(Place.Field.NAME)

// Use the builder to create a FindCurrentPlaceRequest.
val request: FindCurrentPlaceRequest = FindCurrentPlaceRequest.newInstance(placeFields)

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED) {

    val placeResponse = placesClient.findCurrentPlace(request)
    placeResponse.addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val response = task.result
            for (placeLikelihood: PlaceLikelihood in response?.placeLikelihoods ?: emptyList()) {
                Log.i(
                    TAG,
                    "Place '${placeLikelihood.place.name}' has likelihood: ${placeLikelihood.likelihood}"
                )
            }
        } else {
            val exception = task.exception
            if (exception is ApiException) {
                Log.e(TAG, "Place not found: ${exception.statusCode}")
            }
        }
    }
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission()
}

      

Java


// Use fields to define the data types to return.
List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME);

// Use the builder to create a FindCurrentPlaceRequest.
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
    placeResponse.addOnCompleteListener(task -> {
        if (task.isSuccessful()){
            FindCurrentPlaceResponse response = task.getResult();
            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                    placeLikelihood.getPlace().getName(),
                    placeLikelihood.getLikelihood()));
            }
        } else {
            Exception exception = task.getException();
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            }
        }
    });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      

Lưu ý về các giá trị khả năng:

  • Xác suất cung cấp xác suất tương đối về địa điểm phù hợp nhất trong danh sách địa điểm được trả về cho một một yêu cầu duy nhất. Bạn không thể so sánh khả năng xảy ra giữa các yêu cầu khác nhau.
  • Giá trị xác suất sẽ nằm trong khoảng từ 0.0 đến 1.0.

Ví dụ: để thể hiện 55% khả năng địa điểm chính xác là Địa điểm A và xác suất đó là Địa điểm B là 35%, thì phản hồi sẽ có hai thành phần, Đặt A có khả năng là 0,55 và Đặt B có khả năng là 0,35.

Hiển thị thuộc tính trong ứng dụng của bạn

Khi ứng dụng của bạn hiển thị thông tin thu được từ PlacesClient.findCurrentPlace()! ứng dụng cũng phải hiển thị thông tin ghi nhận sự đóng góp. Xem tài liệu về phân bổ.