Android 如何使用GooglePlaceAPI从指定的纬度和经度获取位置地址

Android 如何使用GooglePlaceAPI从指定的纬度和经度获取位置地址,android,google-maps,google-places-api,google-maps-android-api-2,Android,Google Maps,Google Places Api,Google Maps Android Api 2,我正在制作一个出租车预订应用程序,比如优步, 用户拖动地图以使用pin选择其位置 我抓起那个别针的板条 这是我的代码: public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {

我正在制作一个出租车预订应用程序,比如优步, 用户拖动地图以使用pin选择其位置

我抓起那个别针的板条

这是我的代码:

public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
        @Override
        public void onCameraIdle() {
            pinLocation = mMap.getCameraPosition().target;
            setPickupLocationPrefs(pinLocation);
        }
    });

    //Initialize Google Play Services
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            buildGoogleApiClient();
            updateLocationUI();
        }
    }
    else {
        buildGoogleApiClient();
        updateLocationUI();
    }
}
我想获得该pin的地址,以便向我的用户显示应用程序是否在该位置运行(就像优步一样)


如何从pin位置坐标中获取该地址?

使用反向地理编码。首先从销点获取纬度和经度。最好在后台线程中处理这个问题。否则它将阻止用户界面

double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder gc = new Geocoder(this, Locale.getDefault());
try {
    List<Address> addresses = gc.getFromLocation(lat, lng, 1);
    StringBuilder sb = new StringBuilder();
    if (addresses.size() > 0) {
        Address address = addresses.get(0);
        for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
            sb.append(address.getAddressLine(i)).append("\n");
            sb.append(address.getLocality()).append("\n");
            sb.append(address.getPostalCode()).append("\n");
            sb.append(address.getCountryName());
    }
    String Address=sb.toString());
}catch(Exception E);
以下是在您的UI
Activity/Fragment
中对该地理编码器过程的调用:

getAddressFromLocation(PinPointLocation, mContext, new GeocoderHandler());
以及
Activity/Fragment
中的处理程序类,以在UI中显示结果:

private class GeocoderHandler extends Handler {
    @Override
    public void handleMessage(Message message) {
        String result;
        switch (message.what) {
        case 1:
            Bundle bundle = message.getData();
            result = bundle.getString("address");
            break;
        default:
            result = null;
        }
        // replace by what you need to do
        myLabel.setText(result);
    }   
}
private class GeocoderHandler extends Handler {
    @Override
    public void handleMessage(Message message) {
        String result;
        switch (message.what) {
        case 1:
            Bundle bundle = message.getData();
            result = bundle.getString("address");
            break;
        default:
            result = null;
        }
        // replace by what you need to do
        myLabel.setText(result);
    }   
}