如何使用Android Places API自动完成过滤器

如何使用Android Places API自动完成过滤器,android,google-maps,autocomplete,google-places-api,Android,Google Maps,Autocomplete,Google Places Api,我正在尝试在我的应用程序中为android实现新的PlacesAPI,但我似乎不知道如何为请求设置过滤器。这是我的密码 LatLng southWest = new LatLng(85, -180); LatLng northEast = new LatLng(-85, 180); LatLngBounds bounds = new LatLngBounds(southWest, northEast); AutocompleteFilter filter = AutocompleteFilter

我正在尝试在我的应用程序中为android实现新的PlacesAPI,但我似乎不知道如何为请求设置过滤器。这是我的密码

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);
正如你所看到的,我遵循了谷歌提供的文档,但是我没有提到如何实现过滤器,在阅读了之后,我仍然不知道如何实现API

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


感谢文档中的:

表3:支持就地自动完成请求的类型

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

地理编码指示Place Autocomplete服务仅返回地理编码结果,而不是业务结果。通常,当指定的位置可能不确定时,使用此请求来消除结果的歧义。 address指示Place Autocomplete服务仅返回带有精确地址的地理编码结果。通常,当您知道用户将寻找一个完全指定的地址时,您就使用这个请求。 机构指示Place Autocomplete服务仅返回业务结果。 (区域)类型集合指示Places服务返回与以下类型匹配的任何结果: 地点 亚局部 邮政编码 国家 行政区一级 行政区二级 (cities)类型集合指示Places服务返回与Location或administrative_area_level_3匹配的结果

资料来源:

代码:

List filterTypes=new ArrayList();
filterTypes.add(Place.TYPE\u建立);

这就是您需要在AutoComplete Place 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);
如果使用不支持的类型作为筛选器

有关支持的筛选器类型,请参阅此链接


如果使用Google Play services 8.4.0版,则可以使用子类创建过滤器

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

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

请注意,在安装google play services 8.4.0版时,当前存在兼容性问题。如果您遇到这个问题,您可以遵循这个方法,但是如果您遇到困难,我建议您恢复到静态不推荐的方法。

它在Google Play Service 9.4上工作

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

嗨,保罗,你们难道不知道如何把国家和边界框分开吗?谢谢。实际上我不确定这是否可能,但如果可能的话,我不知道。键入地址不在那里。。。如果我想获得完整地址结果,我应该使用哪种类型?@Ivan关于限制国家/地区的结果而不使用边界框,您有两种选择:使用REST API或遍历返回的建议,只返回最后一个字是您感兴趣的国家/地区的结果。希望这能有所帮助。@AbhishekPatel我们决定采用第二种选择。而且效果很好。干杯现在这是正确的解决方案,每个人都应该使用它
mAutocompleteFilter = AutocompleteFilter.Builder().
    setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES).build();
mGeoLocationAdapter = new GeoLocationAdapter(this,
        android.R.layout.simple_list_item_1,
        latLngBounds,
        mAutocompleteFilter);
AutocompleteFilter filter = new AutocompleteFilter.Builder()
        .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
        .build();