Подтвердить что ты не робот

Ограничить использование API автозаполнения для городов определенного типа android

Я использую PlaceAutocompleteApi из Служб Службы, то, что я хочу сделать, ограничивает автоматическое заполнение только для конкретной страны и города. Например. Все города от let говорят только Индия. Я использую AutocompleteFilter для этого, но я не знаю, где указать страну, которую я хочу ограничить.

Вот мой код

        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);

любые мысли по этому поводу?

4b9b3361

Ответ 1

Способ сделать это - добавить страну в качестве параметра components к URL-адресу веб-службы:

StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&components=country:in");

Для городов вы можете использовать тег administrative_area_level_3:

sb.append("&components=administrative_area_level_3:bengaluru");

или, альтернативно, тег locality:

sb.append("&components=locality:redmond");

Литература:

1. API геокодирования.

2. Типы адресов и типы компонентов.

3. Служба автозаполнения API Google Place в приложении для Android. p >

Ответ 2

Вот обходной путь (взломайте, если хотите), который я использовал. Он использует (использует) тот факт, что при преобразовании в строку каждый элемент ответа представляет собой строку, разделенную запятой. Выполните следующие шаги, прежде чем возвращать результат в getFilter().

  • Получите предложения в ArrayList, назовите его returnedResults.
  • Теперь переходим через returnedResults и на каждой итерации получаем каждое предсказание в массив строк с помощью returnedResults.get(i).getFullText(xxx).toString().split(",").
  • Если последний элемент этого массива - имя вашей страны, вставьте его в отдельную переменную ArrayList, позвоните на нее myResult.
  • return myResult.

Причиной использования отдельных переменных является то, что вы не сможете легко манипулировать исходным списком ответов. Этот подход работает как шарм!

Надеюсь, что это поможет.

Ответ 3

Отфильтровать результаты поиска по странам

// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
    .setCountry("AU")
    .build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);

Ответ 4

final StringBuilder sb = new 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"));

Этот api ограничит поиск в области.