如何列出静态位置而非当前位置附近的地点?

时间:2018-12-02 16:47:08

标签: android

我不确定是否已回答。感觉像是一个基本问题,但是我一直在寻找一种方法来做,我遇到的所有示例都显示了设备附近的位置列表。我想做的是通过单击按钮指定位置,然后显示附近的位置。

具体来说,如果用户单击按钮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

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调用。