Reputation: 2829
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 India only. I am using AutocompleteFilter
to do so but I don't know where to specify country that I want to restrict.
Here is my code
List<Integer> autocompleteFilter = new ArrayList<>();
// autocompleteFilter.add(Place.TYPE_COUNTRY);
// autocompleteFilter.add(Place.TYPE_LOCALITY);
mAdapter = new PlaceAutocompleteAdapter(mContext,R.layout.layout_location_text,
mGoogleApiClient, BOUNDS, AutocompleteFilter.create(autocompleteFilter));
mTxtLocation.setAdapter(mAdapter);
mTxtLocation.setOnItemClickListener(mAutocompleteClickListener);
any thoughts on this?
Upvotes: 13
Views: 9976
Reputation: 1271
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.
Upvotes: 0
Reputation: 124
Filter results by country
// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
.setCountry("AU")
.build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);
Upvotes: 1
Reputation: 30611
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.
Upvotes: 8
Reputation: 814
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.
Upvotes: 4