**European Economic Area (EEA) developers**

> [!NOTE]
> If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](https://developers.google.com/maps/comms/eea/faq.md.txt).

> [!NOTE]
> This product is in [Legacy status](https://developers.google.com/maps/legacy.md.txt). As of October 2026, Places API (Legacy) can no longer be enabled for new Google Cloud projects. Existing projects remain fully supported. For new features and improved performance, [migrate
> to Places API (New)](https://developers.google.com/maps/documentation/places/android-sdk/legacy/migrate-overview).

> [!CAUTION]
> **Deprecated:** The `PlacesClient.findCurrentPlace()` method is deprecated. Use [`PlacesClient.searchNearby()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/PlacesClient.md.txt#searchNearby(com.google.android.libraries.places.api.net.SearchNearbyRequest)) instead. Note that in order to use `PlacesClient.searchNearby()`, you need to enable the Places API (New) on your API key in the Google Cloud console.

Using the Places SDK for Android, you can discover the place at the
device's currently-reported location. Examples of places include local
businesses, points of interest, and geographic locations.

> [!NOTE]
> **Note:** To work through a guided, hands-on tutorial, see the [Current Place tutorial](https://developers.google.com/maps/documentation/android-sdk/current-place-tutorial.md.txt).

## Permissions

To use the library you do not need to declare any additional permissions in your app's manifest,
as the library declares all permissions it uses in its manifest. However, if your app uses
[`PlacesClient.findCurrentPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/PlacesClient.md.txt#findCurrentPlace(com.google.android.libraries.places.api.net.FindCurrentPlaceRequest)),
you must [request location permissions](https://developer.android.com/training/location/permissions)
at runtime.

If your app does not use `PlacesClient.findCurrentPlace()`, explicitly remove the
`ACCESS_FINE_LOCATION` and `ACCESS_COARSE_LOCATION` permissions introduced
by the library by adding the following to your manifest:

```
<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>
```

Read more about [permissions](https://developer.android.com/guide/topics/permissions/overview) and consider using [EasyPermissions](https://github.com/googlesamples/easypermissions) to get started.

## Get the current location

To find the local business or other place where the device is currently
located, follow these steps:

1. Call [`ContextCompat.checkSelfPermission`](https://developer.android.com/reference/android/support/v4/content/ContextCompat.html#checkSelfPermission(android.content.Context, java.lang.String)) to check whether the user has granted permission to access their device location. Your app must also include code to prompt the user for permission, and to handle the result. See [Request App Permissions](https://developer.android.com/training/permissions/requesting) for details.
2. Create a [`FindCurrentPlaceRequest`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/FindCurrentPlaceRequest), passing a `List` of `Place.Field`s, specifying the place data types your app should request.
3. Call [`PlacesClient.findCurrentPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/PlacesClient.md.txt#findCurrentPlace(com.google.android.libraries.places.api.net.FindCurrentPlaceRequest)), passing the `FindCurrentPlaceRequest` you created in the previous step.
4. Get the list of [`PlaceLikelihood`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/model/PlaceLikelihood)s from the [`FindCurrentPlaceResponse`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/FindCurrentPlaceResponse).

> [!CAUTION]
> **Note:** While [`PlacesClient.fetchPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/legacy/reference/com/google/android/libraries/places/api/net/PlacesClient#fetchPlace(com.google.android.libraries.places.api.net.FetchPlaceRequest)) supports all place details, [`PlacesClient.findCurrentPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/legacy/reference/com/google/android/libraries/places/api/net/PlacesClient#findCurrentPlace(com.google.android.libraries.places.api.net.FindCurrentPlaceRequest)) only supports a subset of place details. For the list of fields NOT supported by `findCurrentPlace()`, see [Places SDK for Android fields support](https://developers.google.com/maps/documentation/places/android-sdk/legacy/place-data-fields.md.txt#places-sdk-for-android-fields-support).

Fields correspond to Place Search results, and are divided into three billing categories:
Basic, Contact, and Atmosphere. Basic fields are billed at base rate, and incur no additional
charges. Contact and Atmosphere fields are billed at a higher rate. For more information
about how Place data requests are billed, see
[Usage and Billing](https://developers.google.com/maps/documentation/places/android-sdk/usage-and-billing.md.txt).

The API returns a
[`FindCurrentPlaceResponse`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/FindCurrentPlaceResponse)
in a
[`Task`](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task.md.txt).
The `FindCurrentPlaceResponse` contains a list of
[`PlaceLikelihood`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/model/PlaceLikelihood)
objects representing places where the device is likely to be located. For
each place, the result includes an indication of the likelihood that the
place is the right one. The list may be empty, if there is no known place
corresponding to the given device location.

You can call
[`PlaceLikelihood.getPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/model/PlaceLikelihood#getPlace())
to retrieve a
[`Place`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/model/Place.md.txt)
object, and
[`PlaceLikelihood.getLikelihood()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/model/PlaceLikelihood#getLikelihood())
to get the place's likelihood rating. A higher value means a greater
probability that the place is the best match.

The following code sample retrieves the list of places where the device is
most likely to be located, and logs the name and likelihood for each place.

### Kotlin

```kotlin
// Use fields to define the data types to return.
val placeFields = listOf(Place.Field.DISPLAY_NAME, Place.Field.FORMATTED_ADDRESS, Place.Field.LOCATION)

// Define the search area around the current location (500m radius).
val currentLocation = LatLng(37.4220, -122.0841)
val circle = CircularBounds.newInstance(currentLocation, 500.0)
val request = SearchNearbyRequest.builder(circle, placeFields)
    .setMaxResultCount(20)
    .build()

// Call searchNearby and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) ==
    PackageManager.PERMISSION_GRANTED
) {
    placesClient.searchNearby(request).addOnSuccessListener { response ->
        binding.progressBar.visibility = View.GONE
        adapter.setPlaces(response.places)
    }.addOnFailureListener { exception ->
        binding.progressBar.visibility = View.GONE
        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

```java
// Use fields to define the data types to return.
List<Place.Field> placeFields =
        Arrays.asList(
                Place.Field.DISPLAY_NAME,
                Place.Field.FORMATTED_ADDRESS,
                Place.Field.LOCATION);

// Define the search area around the current location.
LatLng currentLocation = new LatLng(37.4220, -122.0841);
LocationRestriction circle =
        CircularBounds.newInstance(currentLocation, /* radius= */ 500.0);

// Use the builder to create a SearchNearbyRequest.
SearchNearbyRequest request =
        SearchNearbyRequest.builder(circle, placeFields).setMaxResultCount(20).build();

// Call searchNearby and handle the response (first check that the user has granted
// permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    Task<SearchNearbyResponse> placeResponse = placesClient.searchNearby(request);
    placeResponse.addOnCompleteListener(
            task -> {
                binding.progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {
                    SearchNearbyResponse response = task.getResult();
                    adapter.setPlaces(response.getPlaces());
                } else {
                    Exception exception = task.getException();
                    if (exception instanceof ApiException apiException) {
                        Log.e(
                                "CurrentPlace",
                                "Place not found: " + apiException.getStatusCode());
                    }
                }
            });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

      
```

Notes about the likelihood values:

- The likelihood provides a relative probability of the place being the best match within the list of returned places for a single request. You can't compare likelihoods across different requests.
- The value of the likelihood will be between 0.0 and 1.0.

For example, to represent a 55% likelihood that the correct place is Place
A, and a 35% likelihood that it's Place B, the response has two members,
Place A with a likelihood of 0.55 and Place B with a likelihood of 0.35.

> [!NOTE]
> **Note:** For more information on initializing `PlacesClient`, see [Initialize the Places API client](https://developers.google.com/maps/documentation/places/android-sdk/config.md.txt#connect-client).

> [!NOTE]
> You can use a [CancellationToken](https://developers.google.com/android/reference/com/google/android/gms/tasks/CancellationToken.md.txt)
> to attempt to cancel a request to any of the request classes (for example,
> `FetchPlaceRequest`). Cancellation is done on a best-effort basis.
> Once a cancellation request is issued, no response will be returned.
> **Issuing a cancellation token does NOT guarantee that a particular request
> will be cancelled, and you may still be charged for the request even if no
> response is returned**.

## Display attributions in your app

When your app displays information obtained from
[`PlacesClient.findCurrentPlace()`](https://developers.google.com/maps/documentation/places/android-sdk/reference/com/google/android/libraries/places/api/net/PlacesClient.md.txt#findCurrentPlace(com.google.android.libraries.places.api.net.FindCurrentPlaceRequest)),
the app must also display attributions. See the documentation on
[attributions](https://developers.google.com/maps/documentation/places/android-sdk/attributions).