一旦应用程序启动地图活动,如何在android中的地图中显示我当前的位置

时间:2016-12-06 21:04:37

标签: android google-maps android-gps

该怎么做,一旦我打开我的应用程序的地图活动,它将显示我在谷歌地图上的当前位置,并用当前街道地址填充文本视图。我搜索了很多但没有得到任何方式这样做。即运行时权限不起作用。获取标记到我当前位置的按钮没有响应。没有显示错误。 这是我的地图活动。

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

private GoogleMap mMap;
private double vlatitude, vlongitude;
private GoogleApiClient vgoogleApiClient;
private Button getButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    //Initializing googleapi client
    vgoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {

        return;
    }

    mMap.setMyLocationEnabled(true);
    getButton = (Button) findViewById(R.id.buttongetme);
    getButton.setOnClickListener(this);
}

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

@Override
protected void onStop() {
    vgoogleApiClient.disconnect();
    super.onStop();
}
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.mipmap.tiltpink)).position(sydney).draggable(true).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    mMap.setOnMarkerDragListener(this);
    mMap.setOnMapLongClickListener(this);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
}

private void getCurrentLocation() {

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    Location location = LocationServices.FusedLocationApi.getLastLocation(vgoogleApiClient);
    if (location != null){
        vlongitude = location.getLongitude();
        vlatitude = location.getLatitude();
        moveMap();
    }
}

private void moveMap() {
    LatLng latLng = new LatLng(vlatitude,vlongitude);
    mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.mipmap.tiltpink)).position(latLng).draggable(true).title("Current Location"));

    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    getCurrentLocation();

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}

@Override
public void onMapLongClick(LatLng latLng) {

    mMap.clear();
    mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.mipmap.tiltpink)).position(latLng).draggable(true).title("This is my loc"));

}

@Override
public void onMarkerDragStart(Marker marker) {

}

@Override
public void onMarkerDrag(Marker marker) {

}

@Override
public void onMarkerDragEnd(Marker marker) {

    vlatitude = marker.getPosition().latitude;
    vlongitude = marker.getPosition().longitude;
    moveMap();

}

@Override
public void onClick(View view) {

    if (view == getButton){
        getCurrentLocation();
        moveMap();
    }

}

1 个答案:

答案 0 :(得分:0)

此方法解决了这个问题。

 @Override
public void onLocationChanged(Location location) {
    if (location != null) {
        LatLng latLang = new LatLng(location.getLatitude(),
                location.getLongitude());
        animateCameraToMarker(latLang, false);
        setMarker(latLang);
        getAddressFromLocation(latLang, source);
    }

   // stop location updates
    if (mGoogleApiClient != null) {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }

}