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
相关产品推荐
相关产品推荐

