현재 장소

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
플랫폼 선택: Android iOS

Android용 Places SDK를 사용하면 현재 보고된 기기의 위치에서 장소를 찾을 수 있습니다. 장소의 예로는 지역 비즈니스, 관심 장소, 지리적 위치가 있습니다.

권한

라이브러리를 사용하려면 매니페스트에서 사용하는 모든 권한을 선언하므로 앱의 매니페스트에 추가 권한을 선언할 필요가 없습니다. 그러나 앱에서 PlacesClient.findCurrentPlace()을 사용하는 경우 런타임에 위치 정보 액세스 권한을 요청해야 합니다.

앱에서 PlacesClient.findCurrentPlace()을 사용하지 않는다면 매니페스트에 다음을 추가하여 라이브러리에서 도입된 ACCESS_FINE_LOCATION 권한을 명시적으로 삭제합니다.

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

권한에 관해 자세히 알아보고 EasyPermissions를 사용하여 시작해 보세요.

현재 위치 가져오기

현재 기기가 있는 지역 비즈니스 또는 기타 장소를 찾으려면 다음 단계를 따르세요.

  1. ContextCompat.checkSelfPermission를 호출하여 사용자가 기기 위치에 대한 액세스 권한을 부여했는지 확인합니다. 앱은 사용자에게 권한을 요청하고 결과를 처리하는 코드도 포함해야 합니다. 자세한 내용은 앱 권한 요청을 참고하세요.
  2. 앱에서 요청해야 할 장소 데이터 유형을 지정하여 FindCurrentPlaceRequest을 만들고 Place.FieldList을 전달합니다.
  3. PlacesClient.findCurrentPlace()을 호출하여 이전 단계에서 만든 FindCurrentPlaceRequest를 전달합니다.
  4. FindCurrentPlaceResponse에서 PlaceLikelihood 목록을 가져옵니다.

필드는 장소 검색결과에 해당하며 세 가지 결제 카테고리(Basic, Contact, Atmosphere)로 구분됩니다. 기본 필드는 기본 요율로 청구되며 추가 요금이 발생하지 않습니다. Contact 및 Atmosphere 필드에는 더 높은 요금이 청구됩니다. 장소 데이터 요청에 대한 요금 청구에 대한 자세한 내용은 사용량 및 결제를 참조하세요.

API는 Task에서 FindCurrentPlaceResponse을 반환합니다. FindCurrentPlaceResponse에는 기기가 있을 가능성이 높은 위치를 나타내는 PlaceLikelihood 객체 목록이 포함되어 있습니다. 결과에는 장소가 올바른 장소일 가능성을 나타내는 결과가 포함됩니다. 지정된 기기 위치에 해당하는 알려진 장소가 없으면 목록이 비어 있을 수 있습니다.

PlaceLikelihood.getPlace()를 호출하여 Place 객체를 가져오고 PlaceLikelihood.getLikelihood() 을(를) 통해 장소 평가 가능성을 가져올 수 있습니다. 값이 클수록 장소가 가장 일치할 확률이 높다는 의미입니다.

다음 코드 샘플은 기기가 있을 가능성이 가장 높은 장소 목록을 검색하고 각 장소의 이름과 가능성을 로깅합니다.

자바


// 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();
}

      

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()
}

      

유사도 값에 대한 유의 사항:

  • 유사도는 단일 요청에 대해 반환된 장소 목록 내에서 장소가 가장 일치하는 상대적 가능성을 제공합니다. 여러 요청의 가능성을 비교할 수 없습니다.
  • 확률 값은 0.0에서 1.0 사이여야 합니다.

예를 들어 올바른 장소가 장소 A일 가능성이 55% 이고 장소 B에서 있을 확률을 35% 로 나타내려면 응답에 두 개의 구성원이 있습니다. 즉, 장소 A에는 0.55의 장소와 장소 B의 위치 가능성이 0.35입니다.

앱에 특성 표시

앱이 PlacesClient.findCurrentPlace()에서 얻은 정보를 표시하면 저작자 표시도 표시해야 합니다. 기여 분석에 대한 문서를 참조하세요.