Android - Google Maps V2 не работает с Fused Location

У меня есть это приложение, в котором я должен поставить пинту своей карты и получить широту и долготу только что нажатой булавки, но когда я хочу щелкнуть карту, приложение не распознает касание, так или иначе, вот мой код:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
        GoogleMap.OnMapClickListener,
        View.OnClickListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {

GoogleMap mMap;
Double latitud, longitud;
Marker marker;
Button buttonAgregarUbicacion;
protected GoogleApiClient mGoogleApiClient;
protected Location mLastLocation;



@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);

    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    checkGpsEnable(locationManager);
    buildGoogleApiClient();



    buttonAgregarUbicacion = (Button) findViewById(R.id.button_agregar_ubicacion);

    buttonAgregarUbicacion.setOnClickListener(this);


}

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}




private void checkGpsEnable(LocationManager locationManager) {
    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
            !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("Al parecer no tienes el GPS activado, para mejorar la experiencia enciéndolo.")
                .setCancelable(false)
                .setPositiveButton("Activar GPS",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                Intent callGPSSettingIntent = new Intent(
                                        Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                startActivity(callGPSSettingIntent);
                            }
                        });
        alertDialogBuilder.setNegativeButton("Cancelar",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                        finish();
                    }
                });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}



@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.setMyLocationEnabled(true);

    if (mLastLocation != null) {
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()), 200));

        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()))
                .zoom(17)
                .build();
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

    }


}



@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.button_agregar_ubicacion:

            if (latitud == null) {
                Toast.makeText(MapsActivity.this, "Pon un pin en el mapa", Toast.LENGTH_SHORT).show();
            } else {

                Intent intent = new Intent(this, CreateReportActivity.class);
                intent.putExtra("latitud", latitud);
                intent.putExtra("longitud", longitud);
                startActivity(intent);
                finish();

            }

            break;
    }
}


@Override
public void onConnected( Bundle connectionHint) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    onMapReady(mMap);

}

@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();
}

@Override
public void onConnectionFailed( ConnectionResult connectionResult) {

}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

@Override
public void onMapClick(LatLng latLng) {
    mMap.clear();
    marker = mMap.addMarker(new MarkerOptions()
            .position(latLng).title("¿Aquí?"));
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
    latitud = latLng.latitude;
    longitud = latLng.longitude;
}

} В любом случае, когда я делаю Debug и помещаю точку останова в метод onMapClick, на этом не останавливается, я использовал это и работал, но до сегодняшнего дня я не реализовал слитное местоположение, и у меня возникла эта проблема.

Я был бы очень благодарен, если бы кто-то мог помочь мне с этим.

Благодарю.

1 ответ

Решение

Вы забыли установить GoogleMap.OnMapClickListener для карты.

Добавьте это к вашему onMapReady:

mMap.setOnMapClickListener(this);
Другие вопросы по тегам