将地方自动填充API限制为特定国家/地区Android的城市

时间:2015-06-18 07:42:07

标签: android google-play-services google-places-api

我正在使用Play服务中的PlaceAutocompleteApi,我想要做的是将自动完成限制为特定国家/地区&仅限城市。例如。所有城市都只能说是印度。我正在使用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);

对此有何看法?

4 个答案:

答案 0 :(得分:8)

这样做的方法是将国家/地区作为components参数添加到网络服务网址:

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。 Geocoding API

2。 Address Types and Component Types

3。 Google Place API Autocomplete Service in Android Application

答案 1 :(得分:4)

这是我使用的一种解决方法(如果你愿意的话)。它利用(利用)这样一个事实:当转换为字符串时,每个响应项都是逗号分隔的字符串。在将结果返回getFilter()之前,请执行以下步骤。

  1. 将建议发送到ArrayList,并将其称为returnedResults
  2. 现在遍历returnedResults并在每次迭代中使用returnedResults.get(i).getFullText(xxx).toString().split(",")将每个预测变为字符串数组。
  3. 如果此数组的最后一个元素是您所在国家/地区的名称,请将其插入单独的ArrayList变量中,我们将其称为myResult
  4. 返回myResult
  5. 使用单独变量的原因是您可能无法轻松操作原始响应列表。这种方法就像一个魅力!

    希望这有帮助。

答案 2 :(得分:1)

按国家/地区过滤结果

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

答案 3 :(得分:0)

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

此API会将搜索范围限制为区域。