代码之家  ›  专栏  ›  技术社区  ›  Shubhendra

如何在应用程序启动地图活动后立即在android地图中显示我的当前位置

  •  -3
  • Shubhendra  · 技术社区  · 8 年前

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

    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 回复  |  直到 8 年前
        1
  •  0
  •   Shubhendra    8 年前

    这种方法解决了这个问题。

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