You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何通过类型筛选Google Places搜索结果?

解决Android PlaceAutocomplete仅筛选学校的问题

我之前也踩过这个坑!你代码里的问题在于**Place.TYPE_SCHOOL是次级类型,不能直接用setTypeFilter()来设置**——这个方法需要传入的是「主类型」(比如商业场所、地理编码这类),次级类型得用另一种方式指定。

正确的实现步骤

Google Places的类型体系分为主类型(Primary Types)和次级类型(Secondary Types),学校属于ESTABLISHMENT(商业场所)这个主类型下的次级类型。所以我们需要先把主类型限定为商业场所,再进一步筛选出学校类型:

// 定义要筛选的次级类型列表,这里只保留学校
val targetTypes = listOf(Place.TYPE_SCHOOL)

// 创建过滤器:先指定主类型为商业场所,再添加次级类型过滤
val autocompleteFilter = AutocompleteFilter.Builder()
    .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ESTABLISHMENT)
    .setTypes(targetTypes)
    .build()

// 构建并启动PlaceAutocomplete意图
val intent = PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY)
    .setFilter(autocompleteFilter)
    .build(this)

startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE)

为什么你的原代码失效?

你之前直接用setTypeFilter(Place.TYPE_SCHOOL),但Place.TYPE_SCHOOL是次级类型常量,而setTypeFilter()接收的是AutocompleteFilter.TYPE_FILTER_*开头的主类型常量(比如TYPE_FILTER_ESTABLISHMENT、TYPE_FILTER_GEOCODE)。传入次级类型会导致过滤器无法匹配任何主类型,自然搜不到结果。

额外注意事项

  • 确保你的Google Cloud Console已经启用了Places API,并且API密钥配置了正确的权限和限制(比如绑定你的应用包名和SHA-1)。
  • 别忘了开启计费功能——Places API是付费服务,未启用计费的话可能会返回空结果或错误。

内容的提问来源于stack exchange,提问作者Fabien Fontaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:59