package com.example.googlemaps;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private FusedLocationProviderClient fusedLocationClient;
private LocationRequest locationRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Obtén una referencia al fragment del mapa
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
// Inicializa el cliente de ubicación fusionada
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// Crea una solicitud de ubicación
locationRequest = new LocationRequest();
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(5000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
// Método para colocar un marcador en la ubicación actual
private void placeMarkerOnMap(LatLng location) {
// Crea un marcador y lo coloca en el mapa
Marker marker = mMap.addMarker(new MarkerOptions().position(location));
// Mueve la cámara del mapa a la ubicación del marcador
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 12));
}
@Override
protected void onStart() {
super.onStart();
// Solicita actualizaciones de ubicación
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Si no tienes permiso para acceder a la ubicación del dispositivo, solicita el permiso
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION},
1);
} else {
// Si tienes permiso para acceder a la ubicación del dispositivo, inicia la solicitud de ubicación
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback,
null /* Looper */);
}
}
@Override
protected void onStop() {
super.onStop();
// Detiene la solicitud de actualizaciones de ubicación
fusedLocationClient.removeLocationUpdates(locationCallback);
}
// Callback que recibe actualizacion
// Callback que recibe actualizaciones de ubicación
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
// Si hay una nueva ubicación, coloca un marcador en el mapa
if (locationResult != null) {
Location location = locationResult.getLastLocation();
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
placeMarkerOnMap(latLng);
}
}
};
}