Manoj
Manoj

Reputation: 2829

Restrict Places Autocomplete API to cities of specific country android

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

Answers (4)

Rishabh Mahatha
Rishabh Mahatha

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

vijikumar
vijikumar

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

Yash Sampat
Yash Sampat

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

Abhishek Patel
Abhishek Patel

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

  1. Get the suggestions into an ArrayList, call it returnedResults.
  2. Now traverse over returnedResults and in each iteration get each prediction into a string array using returnedResults.get(i).getFullText(xxx).toString().split(",").
  3. If the last element of this array is your country's name, insert it in a separate ArrayList variable, let's call it myResult.
  4. return 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

Related Questions