Android - Google Maps V2无法使用Fused Location

时间:2016-12-16 23:10:02

标签: android google-maps google-maps-android-api-2 android-fusedlocation

我有这个应用程序,我必须在地图上放一品脱并获得我刚按下的针的经度和经度,但是当我想点击地图时应用程序无法识别水龙头,无论如何,继承人我的代码:

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;
}

} 无论如何,当我做调试,并且我在方法onMapClick上放置断点并没有停在那里,我已经使用了这个并且工作但我没有实现融合位置直到今天我遇到了这个问题。

我真的很感激有人可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:1)

您忘了为地图设置GoogleMap.OnMapClickListener

将此添加到您的onMapReady

mMap.setOnMapClickListener(this);