如何在地图上显示更新的当前位置作为谷歌地图

时间:2017-12-12 06:35:42

标签: android google-maps android-studio

我尝试在地图上显示当前更新的位置。

当我放大地图并更新位置时,它会缩小然后显示位置。它不会在相同的缩放位置显示更新的位置。 当位置更新然后我再次在地图上设置标记。我认为在地图上设置标记的问题。请帮助我显示当前更新的位置 地图。

public class MainActivity extends FragmentActivity implements OnMapReadyCallback , GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener, LocationListener {

GoogleMap googleMa;
double latitude;
private GoogleApiClient mGoogleApiClient;
double longitude;
private Location mLastLocation = null;
private LocationRequest mLocationRequest;
String mPermission = android.Manifest.permission.ACCESS_FINE_LOCATION;
protected LocationManager locationManager;

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

    ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
            2);

    locationManager = (LocationManager) MainActivity.this
            .getSystemService(Context.LOCATION_SERVICE);
   boolean isGPSEnabled = locationManager
            .isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (checkPlayServices()) {

        buildGoogleApiClient();
        createLocationRequest();
        displayLocation();

    }
    initailizeMap();
}

public void initailizeMap() {
    if (googleMa == null) {
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMa = googleMap;
    Log.d("aaaaaa", " on map    --->" + latitude + " " + longitude);
    displayLocation();

}

public void displayLocation() {
    try {
        GPSTracker gps = new GPSTracker(MainActivity.this);
        if (gps.canGetLocation()) {
            latitude = gps.getLatitude();
            longitude = gps.getLongitude();
            Toast.makeText(getApplicationContext(), "Latitude: " + latitude + " Longitude: " + longitude, Toast.LENGTH_LONG).show();
            final LatLng loc = new LatLng(latitude, longitude);
            Marker ham = googleMa.addMarker(new MarkerOptions().position(loc).title("This is Me").icon(BitmapDescriptorFactory.fromResource(R.drawable.greenpointer)));
            googleMa.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 15));
        }
    } catch (Exception e) {
    }
}

@Override
public void onConnectionFailed(ConnectionResult result) {
    Log.i("aaaaaaaa", "Connection failed: ConnectionResult.getErrorCode() = "
            + result.getErrorCode());
}

@Override
public void onConnected(Bundle arg0) {
    startLocationUpdates();
}

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

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;
    Log.d("aaaaaaaa===>", "" + String.valueOf(location.getLatitude()) + "\n" + String.valueOf(location.getLongitude()));
    Toast.makeText(getApplicationContext(), "Location changed!",
            Toast.LENGTH_SHORT).show();
    displayLocation();
}

private boolean checkPlayServices() {

    GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();

    int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this);

    if (resultCode != ConnectionResult.SUCCESS) {
        if (googleApiAvailability.isUserResolvableError(resultCode)) {
            googleApiAvailability.getErrorDialog(this, resultCode,
                    1000).show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "This device is not supported.", Toast.LENGTH_LONG)
                    .show();
            finish();
        }
        return false;
    }
    return true;
}

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

    mGoogleApiClient.connect();

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(100);
    mLocationRequest.setFastestInterval(500);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult locationSettingsResult) {

            final Status status = locationSettingsResult.getStatus();

            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        status.startResolutionForResult(MainActivity.this, 2000);

                    } catch (IntentSender.SendIntentException e) {
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    break;
            }
        }
    });
}

protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000); // 10 sec
    mLocationRequest.setFastestInterval(5000); // 5 sec
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setSmallestDisplacement(10); // 10 meters
}

protected void startLocationUpdates() {
    LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);
}

protected void stopLocationUpdates() {
    LocationServices.FusedLocationApi.removeLocationUpdates(
            mGoogleApiClient, this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    stopLocationUpdates();
}

}

1 个答案:

答案 0 :(得分:2)

触发onLocationChanged后,您需要从latitude实例获取longitudelocation而不是gps(我不知道是什么{ {1}},没有代码,但肯定没有给你更新的lat,长)

GPSTracker