Google 的 Places API findCurrentPlace 方法是否可以用来获取准确的当前地址,而不是最近的 'Place' 的地址?
Can Google's Places API findCurrentPlace method be used to get the exact current address, rather than the address of the closest 'Place'?
我目前在我的 (Java) Android 应用程序中使用 Google Places API 来获取当前设备位置并将其显示到 editText 中。目前,当我调用 placesClient.findCurrentPlace(request) 时,会返回最近地点列表和设备存在的可能性,如下所示:
Place 'XXXXXXX' has likelihood: 0.600000
Place 'YYYYYYY' has likelihood: 0.0500000
Place 'ZZZZZZZ' has likelihood: 0.00000
这些地方是“泰晤士河”或“Telus 体育场”之类的地方。然后我可以从响应中获取每个地址。我的问题是,有什么办法可以取回 phone 当前位置的地址,而不是最近的 'Place' 的地址?
我对地点自动完成做了类似的事情,因此它会建议地址而不是地点,效果很好。不过,获取当前位置的方式略有不同,因此我似乎无法进行相同的更改。
我尝试使用 Places API 执行此操作的原因是因为我有一个开始和结束位置 AutoCompleteEditText,用户可以在其中键入。他们可以选择在开始位置自动完成编辑文本中显示他们的当前位置,我希望以与他们输入地址并使用地点自动完成点击它时相同的格式显示地址。
这是当前用于获取最近地点地址的代码,我想修改它以获取 phone 当前所在的地址。
List<Place.Field> placeFields = Collections.singletonList(Place.Field.ADDRESS);
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);
...
Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
placeResponse.addOnCompleteListener(new OnCompleteListener<FindCurrentPlaceResponse>() {
@Override
public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
if (task.isSuccessful()) {
FindCurrentPlaceResponse response = task.getResult();
for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
Log.i(LOG_TAG, String.format("Place '%s' has likelihood: %f",
placeLikelihood.getPlace().getAddress(),
placeLikelihood.getLikelihood()));
}
} else {
Log.e(LOG_TAG, "Error finding current location");
}
}
});
忘记必须为此使用 Google 地方 API - 无需与任何 API.
互动即可轻松完成
使用 FusedLocationProviderClient 简单地获取当前位置到 return 设备的最后已知纬度和经度(如 here), and then use an instance of Geocoder to get addresses from that latitude and longitude using the getFromLocation method. This can then easily be converted into a string which matches what the Google Places API would have returned (as seen here 所示)。
我目前在我的 (Java) Android 应用程序中使用 Google Places API 来获取当前设备位置并将其显示到 editText 中。目前,当我调用 placesClient.findCurrentPlace(request) 时,会返回最近地点列表和设备存在的可能性,如下所示:
Place 'XXXXXXX' has likelihood: 0.600000
Place 'YYYYYYY' has likelihood: 0.0500000
Place 'ZZZZZZZ' has likelihood: 0.00000
这些地方是“泰晤士河”或“Telus 体育场”之类的地方。然后我可以从响应中获取每个地址。我的问题是,有什么办法可以取回 phone 当前位置的地址,而不是最近的 'Place' 的地址?
我对地点自动完成做了类似的事情,因此它会建议地址而不是地点,效果很好。不过,获取当前位置的方式略有不同,因此我似乎无法进行相同的更改。
我尝试使用 Places API 执行此操作的原因是因为我有一个开始和结束位置 AutoCompleteEditText,用户可以在其中键入。他们可以选择在开始位置自动完成编辑文本中显示他们的当前位置,我希望以与他们输入地址并使用地点自动完成点击它时相同的格式显示地址。
这是当前用于获取最近地点地址的代码,我想修改它以获取 phone 当前所在的地址。
List<Place.Field> placeFields = Collections.singletonList(Place.Field.ADDRESS);
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);
...
Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
placeResponse.addOnCompleteListener(new OnCompleteListener<FindCurrentPlaceResponse>() {
@Override
public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
if (task.isSuccessful()) {
FindCurrentPlaceResponse response = task.getResult();
for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
Log.i(LOG_TAG, String.format("Place '%s' has likelihood: %f",
placeLikelihood.getPlace().getAddress(),
placeLikelihood.getLikelihood()));
}
} else {
Log.e(LOG_TAG, "Error finding current location");
}
}
});
忘记必须为此使用 Google 地方 API - 无需与任何 API.
互动即可轻松完成使用 FusedLocationProviderClient 简单地获取当前位置到 return 设备的最后已知纬度和经度(如 here), and then use an instance of Geocoder to get addresses from that latitude and longitude using the getFromLocation method. This can then easily be converted into a string which matches what the Google Places API would have returned (as seen here 所示)。