我正在开发一款Android应用,我希望用户在特定城市搜索数据(我的应用提供的数据)。为此,我有一个搜索字段,用户可以在其中键入城市名称。我使用Google Places API检索自动填充结果,如下所示:
PendingResult results =
Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, searchQuery,
mBounds, mPlaceFilter);
在我的情况下,mBounds代表了德国的界限,因为我只对德国的城市感兴趣,我不希望其他国家的城市出现在自动完成预测中。现在,显然德国不是一个完美的广场,所以mBounds包含整个德国,但也包括像瑞士这样的周边国家的一部分。问题是:如何删除德国不地点的所有自动填充预测?
我的第一个想法是使用场所过滤器来首先只获得一个国家的预测。根据{{3}},这确实可用于按地区(例如按国家/地区)进行过滤,但遗憾的是,Google Places API for Android 不支持此特定过滤(根据文档)
Google Places API for Android不支持(区域)类型集合。
似乎也没有任何可能从documentation或Place对象获取AutocompletePrediction的国家/地区。所以我自己甚至都不能过滤。
我能想到的唯一解决方案如下:
从预测中获取Place并使用Place检索Geocoder API,然后从中获取国家/地区并进行过滤。然而,这是一个额外的网络呼叫(以及另一个违反我的配额)似乎完全没有必要,因为在我看来Address对象或至少AutocompletePrediction个对象应该知道哪个国家/地区是一个地方。毕竟,它是这些对象的description / toString结果的一部分。然而,这只是一个像“慕尼黑,德国”的字符串。
使用1.中提到的描述字符串来确定国家/地区。然而,这似乎是比1更糟糕的解决方案,因为描述是根据用户的区域设置进行本地化的,这可能是一切。所以只是寻找“德国”就不会做这个工作。
我希望找到一个比我目前提出的解决方案更好的解决方案。我无法想象没有更好的方法来做到这一点。有什么想法吗?
答案 0 :(得分:1)
我有同样的问题没有运气找到一种方法来过滤特定国家,所以我作为一个愚蠢的解决方法做的是过滤结果,如果它在我的情况下包含国家名称"阿拉伯联合酋长国&#34 ;
while (iterator.hasNext()) {
AutocompletePrediction prediction = iterator.next();
// Get the details of this prediction and copy it into a new PlaceAutocomplete object.
if(prediction.getDescription().contains("United Arab Emirates"))
resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
prediction.getDescription()));
}
答案 1 :(得分:1)
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().
setTypeFilter(Place.TYPE_COUNTRY).setCountry("you country code").build();
Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
.setFilter(typeFilter)
.build(this);