为 Android 的地点自动完成 API 创建地点类型过滤器

Creating a place type filter for the Place Autocomplete API for Android

这个 API 似乎很新,所以这里没有太多关于它的问题,也没有很多教程。

我按照 Google 的教程进行操作,并在我的应用程序中使用了自动完成 Android api。我现在正在尝试使用 AutocompleteFilter 将我的结果限制在特定区域或特定类型的地方。

对于像我这样的初学者来说,似乎几乎没有文档解释该怎么做。

AutocompleteFilter 需要一个 Collection 对象。如何将以下值更改为整数?

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

问题由 Google 员工本人解决,我通过我们的 Maps for Work 支持门户联系了他。

这是一个位置类型列表及其对应的整数。

https://developers.google.com/android/reference/com/google/android/gms/location/places/Place

这些可用于过滤 Android 地点自动完成 API。

我还不能发表评论,所以我在这里添加对上面答案的警告:

并非所有来自 Place 的常量都可用于使用 AutocompleteFilter 进行过滤,Android 上只有两个可用:Place.TYPE_GEOCODEPlace.TYPE_ESTABLISHMENT('address' 出现在文档中但没有在 Place)

中作为常量

如果使用任何其他常量(例如 Place.TYPE_LOCALITY),请求将导致此令人困惑的状态错误:

Status{statusCode=NETWORK_ERROR, resolution=null}  

Android Place Autocomplete 不支持上一个答案中提供的 link 枚举的所有类型。

自 v8.4 版本以来,支持的类型由 AutocompleteFilter 提供,如文档所述here

// AutocompleteFilter
public static final int TYPE_FILTER_NONE = 0;
public static final int TYPE_FILTER_GEOCODE = 1007;
public static final int TYPE_FILTER_ADDRESS = 2;
public static final int TYPE_FILTER_ESTABLISHMENT = 34;
public static final int TYPE_FILTER_REGIONS = 4;
public static final int TYPE_FILTER_CITIES = 5;

根据您的要求,可以构建 AutocompleteFilter。然后可以使用 setFilter() 将此过滤器应用于 IntentBuilder

例如:

  1. 如果您想将结果限制在特定国家/地区,您可以通过以下方式实现:

    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().setCountry("IN").build();
    
    Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN).setFilter(typeFilter).build(this);
    
  2. 如果您想将结果限制为特定地点类型,您可以通过将过滤器更改为类似的方式来做到这一点:

    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().setTypeFilter(AutocompleteFilter.TYPE_FILTER_REGIONS).build();