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.