如何使用新的places sdk for android查找附近的地方?

Posted

技术标签:

【中文标题】如何使用新的places sdk for android查找附近的地方?【英文标题】:How to find nearby places using new places sdk for android? 【发布时间】:2020-05-12 07:44:29 【问题描述】:

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

【问题讨论】:

检查此链接一次***.com/a/57832796/12018179 仍然存在通过文本搜索查找地点的选项,例如:字符串。我想在用户输入“gym”、“bank”等时查找附近的位置? 现有功能请求 (issuetracker.google.com/133276015) 添加适用于 Android 的“附近搜索位置”SDK。您可以在链接上加注星标以添加您的投票并接收有关此的进一步更新。 【参考方案1】:

以下代码是一个示例,可用于指导如何在 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。

希望这会有所帮助!

【讨论】:

哦,我明白了,让我看看这个然后回复你。 Heya @Marin 抱歉花了这么长时间,我今天终于可以研究这个了 :) @Marin 请查看我的编辑。希望这是你想要的! :) 感谢您的帮助兄弟,但是它对我的显示与对您的显示不同。对我来说,附近没有地方。无论如何,我设法做到了;)。现在我正在尝试显示当前地点和附近地点之间的路线。到目前为止还没有运气/如果你能帮我解决这个问题,请告诉我。干杯! 不确定我理解你的意思,但无论如何我很高兴你能够让它工作,很高兴能帮上忙! :) 至于你的新问题,请发帖是一个新问题,如果没有其他人能比我更好,我会回答你哈哈。

以上是关于如何使用新的places sdk for android查找附近的地方?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是使用 FB SDK 4.0 for Android 登录?

如何使用 sdk v4 for node js 重新启动与机器人的连接

存根 Google Maps/Places iOS SDK 调用以进行单元测试

Places SDK 中的 APIException 9011 和 9010 错误

Google iOS 地理编码 SDK 将经纬度反向转换为 Places ID

Google Places Android 显示错误“地点字段不得为空”?