我不确定是否已回答。感觉像是一个基本问题,但是我一直在寻找一种方法来做,我遇到的所有示例都显示了设备附近的位置列表。我想做的是通过单击按钮指定位置,然后显示附近的位置。
具体来说,如果用户单击按钮1,则意味着用户想查看火车站A附近的地方,可能是在另一个带有RecyclerView的活动中。
我使用http://www.zoftino.com/current-location-and-nearby-places-android-example作为参考。我一直遵循此方法,将API密钥添加到清单文件中,但在尝试分析如何定义特定位置而不是获取设备位置时遇到了麻烦。
我不确定我是否正确地解决了这个问题,但是到目前为止,我已经制作了一个Java Bean,可以获取选择了哪个工作站的信息...
public class Station {
String station;
public Station (String station) {
this.station = station;
}
public Station () {
}
public String getStation() {
return station;
}
public void setStation(String station) {
this.station = station;
}
我也有一个带有onClick方法的活动来检查单击了哪个按钮...
public void onClick (View v) {
switch (v.getId()) {
case R.id.img1: station = getString(R.string.StationName1);
Log.d("project", "selected station is " + station);
break;
//other cases deleted to make this more concise
}
Station selected = new Station (station);
Log.d("project", "content of station bean is " + selected.getStation());
}
我正在使用运行Android 7.1.1的手机对其进行测试。从logcat中,我知道Station Bean能够正确获取选定的工作站。老实说,我不知道为什么决定使用getString(R.string.StationName1),但考虑到我正在4条火车线上进行此操作,而我已经超过了项目的截止日期。如果可能的话,我宁愿不必更改它们。
我当时正在考虑向Java bean添加某种“ coordinates”属性,并使用上面的switch案例传递确切的坐标,但是即使我这样做了,我仍然不知道如何使用它,因此我可以展示附近的位置。
编辑:我正在使用Android Studio 3.2.1
答案 0 :(得分:0)
链接的教程具有以下代码块,用于检测和显示位置:
@SuppressLint("MissingPermission")
private void getCurrentPlaceData() {
Task<PlaceLikelihoodBufferResponse> placeResult = placeDetectionClient.
getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
@Override
public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
Log.d(TAG, "current location places info");
List<Place> placesList = new ArrayList<Place>();
PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
for (PlaceLikelihood placeLikelihood : likelyPlaces) {
placesList.add(placeLikelihood.getPlace().freeze());
}
likelyPlaces.release();
PlacesRecyclerViewAdapter recyclerViewAdapter = new
PlacesRecyclerViewAdapter(placesList,
CurrentLocationNearByPlacesActivity.this);
recyclerView.setAdapter(recyclerViewAdapter);
}
});
}
在这里,getCurrentPlace
方法使用当前设备位置,这可能是导致问题的原因。实际上,位置检测客户端documentation本身指出:(强调我的意思)
位置检测API可快速访问设备的当前位置,并提供机会报告设备在特定位置的位置(例如签入)。
就像您说的那样,Android Places SDK中似乎没有任何API可为某个位置提供“附近的地方”功能。即使是上面的方法,也试图将当前用户位置与已知位置相关联(相对于没有额外信息的坐标集),这似乎并不是要通过设计来搜索附近的位置(尽管显然可以完成)。
但是,可以根据您的要求使用Place Search API(我已经在执行与您要执行的操作类似的应用程序中使用了它)。它包括Nearby Search Requests的终结点,可以在其中传递静态位置。唯一的缺点是,由于SDK没有针对该API的现有框架,因此您将不得不通过Retrofit或类似方法来处理HTTP调用。