如何使用 android 的新地点 sdk 查找附近的地点?

How to find nearby places using new places sdk for android?

我正在尝试应用 android 在 2019 年 1 月 29 日之后添加的新库。所有旧应用程序都在使用地图和 places sdk,它们的方法已被弃用。我试图阅读所有新文档,但新图书馆似乎不支持附近搜索,但仅支持当前位置。如果我说错了,请指正。

下面的代码是一个示例,您可以使用它来指导如何从 Android 应用程序中的 Java client 调用附近的搜索服务:

MapsActivity.java

import android.content.Context;
import android.os.Bundle;
import android.util.Log;

import androidx.fragment.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.maps.model.PlacesSearchResult;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private Context mContext;
    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        PlacesSearchResult[] placesSearchResults = new NearbySearch().run().results;

        Log.e("response1Tag", placesSearchResults[0].toString());
        Log.e("response2Tag", placesSearchResults[1].toString());

        double lat1 = placesSearchResults[0].geometry.location.lat;
        double lng1 = placesSearchResults[0].geometry.location.lng;

        double lat2 = placesSearchResults[1].geometry.location.lat;
        double lng2 = placesSearchResults[1].geometry.location.lng;

        mMap.addMarker(new MarkerOptions().position(new LatLng(lat1, lng1)));
        mMap.addMarker(new MarkerOptions().position(new LatLng(lat2, lng2)));

        mMap.setMinZoomPreference(14.0f);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat1, lng1)));
    }
}

NearbySearch.java

import com.google.maps.GeoApiContext;
import com.google.maps.PlacesApi;
import com.google.maps.errors.ApiException;
import com.google.maps.model.PlaceType;
import com.google.maps.model.PlacesSearchResponse;
import com.google.maps.model.RankBy;
import com.google.maps.model.LatLng;
import java.io.IOException;

public class NearbySearch {

    public PlacesSearchResponse run(){
        PlacesSearchResponse request = new PlacesSearchResponse();
        GeoApiContext context = new GeoApiContext.Builder()
                .apiKey("MY_KEY")
                .build();
        LatLng location = new LatLng(-33.8670522, 151.1957362);

        try {
            request = PlacesApi.nearbySearchQuery(context, location)
                    .radius(5000)
                    .rankby(RankBy.PROMINENCE)
                    .keyword("cruise")
                    .language("en")
                    .type(PlaceType.RESTAURANT)
                    .await();
        } catch (ApiException | IOException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            return request;
        }
    }
}

在build.gradle中添加:

implementation 'com.google.maps:google-maps-services:0.11.0'

截图:

请注意,您将用于调用 API 的 API 密钥应妥善保护,例如您可能需要设置代理服务器。看看these techniques.

希望对您有所帮助!