I am using PlaceAutocompleteApi
from Play Services, what I want to do is restrict auto-complete to specific country & city only. Eg. All cities from lets say In
val sb = StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON)
sb.append("?key=$API_KEY")
sb.append("&types=establishment")
sb.append("&location=$locationLat,$LocationLng")
sb.append("&radius=50000&strictbounds")
sb.append("&input=" + URLEncoder.encode(input, "utf8"))
This api will restrict the search to area.
Filter results by country
// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
.setCountry("AU")
.build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);
Here's a workaround (hack if you will) that I used. It utilizes (exploits) the fact that when converted to string, each response item is a comma separated string. Do the following steps before returning the result to getFilter()
.
ArrayList
, call it returnedResults
.returnedResults
and in each iteration get each prediction into a string array using returnedResults.get(i).getFullText(xxx).toString().split(",")
.ArrayList
variable, let's call it myResult
.myResult
.The reason for using separate variables is because you might not be able to manipulate the original response list so easily. This approach works like a charm!
Hope this helps.
The way to do that is to add the country as the components
parameter to the web service URL:
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&components=country:in");
For cities you can use either the administrative_area_level_3
tag:
sb.append("&components=administrative_area_level_3:bengaluru");
or alternatively the locality
tag:
sb.append("&components=locality:redmond");
References:
1. Geocoding API.
2. Address Types and Component Types.
3. Google Place API Autocomplete Service in Android Application.