【问题标题】:Creating a place type filter for the Place Autocomplete API for Android为 Android 的 Place Autocomplete API 创建地点类型过滤器
【发布时间】:2015-08-23 20:38:56
【问题描述】:

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

我按照 Google 的教程操作,让 Autocomplete Android api 在我的应用中运行。我现在正在尝试使用 AutocompleteFilter 将我的结果限制在某个区域或某些类型的地方。

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

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

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

【问题讨论】:

  • 您的问题到底是什么?它与android AutoCompleteTextView 或Google Places AutoComplete api 有关吗?如果您想要更简单的 AutoCompleteTextView,您可以使用库 github.com/mobisystech/autocompletetextview.. 它有 AutoComplete Google 地方作为示例,可能对您有所帮助..
  • 问题很清楚。阅读 URL 之前的最后一行。我想为 Google Place Autocomplete 查询创建一个 Place Type 过滤器。

标签: android autocomplete google-places-api


【解决方案1】:

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

这里是地点类型及其整数对应物的列表。

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

这些可用于过滤 Android Place Autocomplete API。

【讨论】:

  • 很抱歉投了反对票,这是偶然的。如果不先编辑您的答案,我将无法恢复它。 :(
  • @AngelosVeglektsis 我代表你投了赞成票。这正是我正在寻找的链接,感谢 Asim 分享答案
【解决方案2】:

我还不能发表评论,所以我在此处添加了对上述答案的警告:

并非所有来自 Place 的常量都可用于使用 AutocompleteFilter 进行过滤,Android 上只有两个可用:Place.TYPE_GEOCODE 和 Place.TYPE_ESTABLISHMENT(“地址”出现在文档中,但在 Place 中不是常量)

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

Status{statusCode=NETWORK_ERROR, resolution=null}  

【讨论】:

    【解决方案3】:

    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;
    

    【讨论】:

      【解决方案4】:

      根据您的要求,可以构建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();
        

      【讨论】:

      • AutomCompleteFilter 类中没有可用作 setCountry(String) 的方法。
      • 有一个选项可用。您必须使用构建器模式。您可以在此处参考文档:link
      • 谢谢卡兰。但是我无法使用您在回答中提到的 setCountry() 方法。它说没有这种方法。而且我在任何地方都找不到这种方法的任何示例用法。你能帮我解决这个问题吗?
      • @gReEnHoRn 当然。你能写出你遇到问题的代码吗?
      • 谢谢卡兰。我的问题已经解决了。我使用的是不支持此方法的 google play 服务版本 9.0.2。更新了我的播放服务版本,我可以使用您建议的方法调用。它工作正常,结果我受到国家限制。我只想将语言限制为英语。因为我获得了一些搜索结果的区域语言数据。你对此有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多