0
我使用的是Google Place的getCurrentPlace API,並且想要將結果過濾到某些類型的位置。我怎樣才能做到這一點?如何過濾Google Places getCurrentPlace的結果?
我使用的是Google Place的getCurrentPlace API,並且想要將結果過濾到某些類型的位置。我怎樣才能做到這一點?如何過濾Google Places getCurrentPlace的結果?
雖然getCurrentPlace確實帶有一個過濾器參數,但過濾器非常受限制 - 它只允許按現在打開的業務過濾或通過特定的位置ID進行過濾(如果要按預定義位置列表進行過濾)。在一個糟糕的設計中,這個類是最終的,所以你不能擴展它。您必須在調用其API後進行篩選。這是一個有點浪費的記憶智慧,但沒有避免它。
以下代碼按類型過濾PlaceLikelihoodBuffer。它允許您指定多個允許的類型和不允許的類型。禁止優先於允許 - 例如,如果您指定允許爲餐廳並且不允許爲雜貨店,則會拒絕雜貨店中的任何咖啡館。
package com.gabesechan.android.reusable.location;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.PlaceLikelihood;
import com.google.android.gms.location.places.PlaceLikelihoodBuffer;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class PlaceTypeFilter {
private Set<Integer> mAllowedTypes;
private Set<Integer> mDisallowedTypes;
public PlaceTypeFilter(int allowedTypes[], int disallowedTypes[]) {
mAllowedTypes = new HashSet<>();
for(int type : allowedTypes) {
mAllowedTypes.add(type);
}
mDisallowedTypes = new HashSet<>();
for(int type : disallowedTypes) {
mDisallowedTypes.add(type);
}
}
public boolean hasMatchingType(Place place) {
List<Integer> types = place.getPlaceTypes();
for (int type : types) {
if (mDisallowedTypes.contains(type)) {
return false;
}
}
for (int type : types) {
if (mAllowedTypes.contains(type)) {
return true;
}
}
return false;
}
public List<PlaceLikelihood> filteredPlaces(PlaceLikelihoodBuffer places) {
List<PlaceLikelihood> results = new ArrayList<>();
for(PlaceLikelihood likelihood : places) {
if(hasMatchingType(likelihood.getPlace())) {
results.add(likelihood);
}
}
return results;
}
}