如何使用 Android Places API AutocompleteFilter

How to use Android Places API AutocompleteFilter

我正在尝试在我的应用程序中为 android 实施新的地点 API,但我似乎无法弄清楚如何为请求设置过滤器。这是我的代码。

LatLng southWest = new LatLng(85, -180);
LatLng northEast = new LatLng(-85, 180);
LatLngBounds bounds = new LatLngBounds(southWest, northEast);
AutocompleteFilter filter = AutocompleteFilter.create(WHAT SHOULD GO HERE?);
PendingResult result = Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient,
            search.getText().toString(), bounds, filter);

如您所见,我遵循了 google here but I they dont talk about how to implement the filter, after reading the API Reference 提供的文档,我仍然无法弄清楚如何实施 API。

我需要帮助弄清楚 API 的 AutocompleteFilter.create() 的参数应该输入什么。我想按城市过滤数据

谢谢

来自文档:

Table 3: 自动完成请求支持的类型

您可以通过传递类型参数将地点自动完成请求的结果限制为特定类型。该参数指定类型或类型集合,如下面支持的类型中所列。如果未指定任何内容,则所有类型都是 returned。通常只允许使用一种类型。例外情况是您可以安全地混合地理编码和机构类型,但请注意,这与不指定任何类型具有相同的效果。支持的类型是:

geocode 指示地点自动完成服务 return 仅对结果进行地理编码,而不是业务结果。通常,您使用此请求来消除指定位置可能不确定的结果的歧义。 地址指示地点自动完成服务 return 仅对具有精确地址的结果进行地理编码。通常,当您知道用户将寻找一个完全指定的地址时,您会使用此请求。 设置指示 Place Autocomplete 服务仅 return 业务结果。 (regions) 类型集合指示 Places 服务 return 匹配以下类型的任何结果: 地点 小区 postal_code 国家 administrative_area_level_1 administrative_area_level_2 (cities) 类型集合指示 Places 服务 return 结果匹配地点或 administrative_area_level_3.

来源:https://developers.google.com/places/supported_types

代码:

    List<Integer> filterTypes = new ArrayList<Integer>();
    filterTypes.add( Place.TYPE_ESTABLISHMENT );

这就是您需要在自动完成位置 API 中设置过滤器的方式。

    List<Integer> filters = new ArrayList<Integer>();
        filters.add(Place.TYPE_ADMINISTRATIVE_AREA_LEVEL_1);
    mAutocompleteFilter = AutocompleteFilter.create(filters);
    mGeoLocationAdapter = new GeoLocationAdapter(this,
            android.R.layout.simple_list_item_1,
            latLngBounds,
            mAutocompleteFilter);

Android仅支持少数类型, 你将获得

AutocompletePredictionBuffer{status=Status{statusCode=NETWORK_ERROR, resolution=null}}

如果您使用不受支持的类型作为过滤器。

查看此 link 以了解支持的过滤器类型。

https://developers.google.com/places/supported_types#table3

如果您使用 Google Play 服务版本 8.4.0,您可以使用子类 AutocompleteFilter.Builder 创建过滤器。

它更易于使用,因为您不必手动构建地点类型列表。

mAutocompleteFilter = AutocompleteFilter.Builder().
    setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES).build();
mGeoLocationAdapter = new GeoLocationAdapter(this,
        android.R.layout.simple_list_item_1,
        latLngBounds,
        mAutocompleteFilter);

请注意,目前安装 google 播放服务版本 8.4.0 时存在兼容性问题。如果你运行遇到这个问题,如果你遇到困难,你可以按照这个, but I suggest reverting to the static deprecated AutocompleteFilter.create()方法。

适用于 Google Play 服务 9.4。

AutocompleteFilter filter = new AutocompleteFilter.Builder()
        .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
        .build();