Manualmapa 1
Manualmapa 1
En el código va a enseñar:
Latitud y longitud
Mapa
Búsqueda de ubicación
Permisos
Implementaciones
PROYECTO
Para empezar, tenemos que crear un nuevo proyecto en Android Studio, Este será
un (Empaty Views Activity) lo trabajaremos en el lenguaje de java y le
asignaremos un nombre.
Ya creado nuestro proyecto, vamos a iniciar con la creación de API, para esto
nos dirigiremos a Manifests el cual esta localizado en la parte superior a la
izquierda.
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value=" "/>
Esta línea:
1. Provee la clave de API que permite a tu aplicación comunicarse con los
servicios de Google Maps.
Para esto ya tuviste que crearte una cuenta, al ingresar daremos clic en “Go to my
console ”
Después nos abrirá esta pestaña en la cual daremos clic en la parte de arriba a lado de
“GOOGLE
CLOUNT”, nos abrirá un menú y daremos clic en proyecto nuevo.
Al darle clic nos aparecerá una pestaña en la cual tenemos que asignarle un nombre a
nuestro proyecto y una ubicación “Pero no pondremos nada en este campo”, después le
daremos en crear
Después abrirá esta ventana en la cual nos muestra todas las APIs que podemos
usar, pero nosotros elegiremos “Maps SDK for Android”, y le daremos clic.
Al darle clic nos mandara a esta ventana en la cual tendremos que habilitar el API,
solo hay que darle en habilitar.
Después que ya se allá habilitado, ahora tendremos que crear una credencial, para
eso daremos en menú y buscaremos “Credenciales”
Nos abrirá esta ventana y buscaremos “Crear Credenciales” al darle clic nos
aparecerá un menú en el cual elegiremos “Clave API”.
Con esto echo, nos dará nuestra clave API la cual tendremos que copiar.
android:id="@+id/txtlatitud"
Define el ID único del EditText.
Permite acceder a este elemento desde el código
Java/Kotlin mediante findViewById().
android:layout_width="0dp"
El ancho se ajusta dinámicamente según las
restricciones definidas (en este caso, usando
ConstraintLayout).
El valor 0dp se usa con restricciones para decir que se
estire entre las posiciones marcadas por las
restricciones de inicio y fin.
android:layout_height="wrap_content"
El alto se ajusta al contenido, es decir, al tamaño del
texto que contenga.
android:layout_marginStart="10dp"
Define un margen de 10dp desde el borde izquierdo del
contenedor (compatible con el diseño RTL - de derecha
a izquierda).
android:layout_marginTop="10dp" y
android:layout_marginEnd="10dp"
Añaden un margen superior y margen derecho de
10dp.
android:ems="10"
Establece el ancho predeterminado del EditText en
términos de caracteres "M".
Por ejemplo, ems="10" significa que el campo será lo
suficientemente ancho para contener 10 letras "M" (ya
que es uno de los caracteres más anchos).
android:inputType="text"
Define el tipo de entrada esperado. En este caso,
permite ingresar texto libre.
app:layout_constraintBottom_toTopOf="@+id/
txtlongitud"
Coloca el EditText encima del otro campo con ID
txtlongitud.
app:layout_constraintEnd_toEndOf="parent"
Restringe el extremo derecho del EditText al borde
derecho del contenedor (parent).
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintVertical_bias="0.5"
explicadas :
implementation("com.google.android.gms:play-services-
maps:19.0.0")
¿Qué hace?
android:name="com.google.android.gms.maps.SupportMapFr
agment"
Parte logica
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATI
ON"/>
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
Uso típico:
Para obtener coordenadas exactas del usuario.
Mostrar la ubicación del usuario en Google Maps.
Aplicaciones que requieren alta precisión, como apps de
navegación y mapas en tiempo real.
<uses-permission
android:name="android.permission.ACCESS_COARSE_L
OCATION"/>
Uso típico:
Cuando no necesitas la ubicación exacta del usuario, por
ejemplo, para personalizar el contenido según la
ciudad o región.
<uses-permission
android:name="android.permission.INTERNET" />
Interfaces implementadas:
LOCATION_PERMISSION_REQUEST_CODE: Es un valor
constante que se usa para identificar la solicitud de
permisos de ubicación.
txtlongitud, txtlatitud, txtSearch: Son objetos de tipo
EditText, que son campos de texto donde el usuario
puede ver o ingresar información (en este caso, latitud,
longitud y texto para buscar una ubicación).
btnSearch: Un botón que permite al usuario realizar una
acción cuando lo pulsa, como buscar una ubicación.
mMap: Es una instancia de GoogleMap, que será el
objeto para interactuar con el mapa de Google.
4.Método onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtlatitud = findViewById(R.id.txtlatitud);
txtlongitud = findViewById(R.id.txtlongitud);
txtSearch = findViewById(R.id.txtSearch);
btnSearch = findViewById(R.id.btnSearch);
findViewById: Este método busca dentro del archivo de
diseño (XML) un componente que tenga el id
especificado.
o txtlatitud: Se vincula con el campo de texto en el
layout que tiene el id txtlatitud, donde se mostrará o
ingresará la latitud.
o txtlongitud: Se vincula con el campo de texto que
tiene el id txtlongitud para mostrar o ingresar la
longitud.
o txtSearch: Se vincula con el campo de búsqueda
con el id txtSearch.
o btnSearch: Vincula el botón de búsqueda con el id
btnSearch.
o Build.VERSION.SDK_INT >=
Build.VERSION_CODES.M: Aquí se verifica si la
versión de Android del dispositivo es Marshmallow
(API 23) o superior. A partir de Android 6.0
(Marshmallow), la forma de solicitar permisos cambió
y ahora los permisos sensibles, como el de
ubicación, deben solicitarse en tiempo de ejecución.
Comprobación de permisos:
o ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION):
Este método verifica si el permiso para acceder a la
ubicación precisa (ACCESS_FINE_LOCATION) ha
sido otorgado.
o != PackageManager.PERMISSION_GRANTED: Si
el permiso no ha sido otorgado, se ejecuta el
siguiente bloque de código para solicitarlo.
Solicitud de permisos:
o ActivityCompat.requestPermissions: Si el
permiso aún no ha sido concedido, este método
solicita al usuario que lo otorgue. Los permisos
solicitados aquí son ACCESS_FINE_LOCATION, y el
resultado de la solicitud será gestionado en el
método onRequestPermissionsResult.
o LOCATION_PERMISSION_REQUEST_CODE: Es un
código numérico que permite identificar qué solicitud
de permisos está siendo gestionada. En este caso, se
usa para la ubicación.
Habilitar la ubicación:
o Si el permiso ya fue concedido o si la versión de
Android es inferior a Marshmallow, se llama a
enableMyLocation(), un método que habilita la
funcionalidad de ubicación en el mapa.
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String location = txtSearch.getText().toString();
searchLocation(location);
}
});
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode ==
LOCATION_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED) {
enableMyLocation(); // Habilitar la ubicación si se
otorgan los permisos
} else {
Toast.makeText(this, "Permiso de ubicación
denegado", Toast.LENGTH_SHORT).show();
}
}
}
onRequestPermissionsResult: Este método gestiona
el resultado de la solicitud de permisos (en este caso, de
ubicación). Se ejecuta automáticamente después de que
el usuario acepta o rechaza los permisos solicitados.
1. Método onMapReady
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
mMap = googleMap;
this.mMap.setOnMapClickListener(this);
this.mMap.setOnMapLongClickListener(this);
enableMyLocation(); // Habilitar mi ubicación
loadCurrentLocation();
}
Este método es parte de la interfaz OnMapReadyCallback,
que se implementa cuando se usa Google Maps en una
actividad. Se llama cuando el mapa está listo para ser usado.
2. Método loadCurrentLocation
Verificación de permisos:
o ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION):
Verifica si el permiso para acceder a la ubicación
precisa (ACCESS_FINE_LOCATION) ha sido otorgado.
o ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATIO
N): Verifica si se ha otorgado el permiso para
acceder a la ubicación aproximada
(ACCESS_COARSE_LOCATION).
o Si alguno de los permisos ha sido concedido, el
código intenta obtener la ubicación actual del
usuario.
Ubicación predeterminada:
o else: Si la ubicación actual no está disponible (es
null), el código centra el mapa en una ubicación
predeterminada con latitud 19.4310853 y longitud -
99.152987, que corresponde a la Ciudad de México.
o El nivel de zoom en este caso es 10, lo que muestra
un área más amplia.
1.Verificación de permisos
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
return;
}
Comprobación de permisos:
o Este bloque verifica si los permisos de ubicación han
sido concedidos.
o ACCESS_FINE_LOCATION: Permiso para acceder a
la ubicación precisa del usuario.
o ACCESS_COARSE_LOCATION: Permiso para
acceder a la ubicación aproximada del usuario.
Condición &&:
o La condición comprueba que ninguno de los dos
permisos haya sido concedido. Si ambos son
denegados, el método sale sin hacer nada usando
return.
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
geocoder.getFromLocationName(location, 1): Se
utiliza el Geocoder para buscar una ubicación en base al
nombre o dirección proporcionada por el usuario. El
número 1 indica que queremos obtener un solo resultado
(la primera coincidencia).
if (addressList != null && !addressList.isEmpty()):
Si la búsqueda devuelve resultados, se toma el primer
resultado de la lista (addressList.get(0)) y se almacena
en la variable address.
new LatLng(address.getLatitude(),
address.getLongitude()): Se crea un objeto LatLng
con las coordenadas de la ubicación encontrada (latitud y
longitud).
mMap.clear(): Se limpia el mapa de cualquier marcador
o elemento previo
mMap.addMarker(new
MarkerOptions().position(latLng).title(address.get
FeatureName())): Se añade un marcador en la
ubicación encontrada usando las coordenadas de latLng.
El título del marcador es el nombre del lugar obtenido
por address.getFeatureName().
mMap.moveCamera(CameraUpdateFactory.newLat
LngZoom(latLng, 15)): La cámara del mapa se mueve
a las coordenadas de latLng con un nivel de zoom 15,
lo que muestra una vista cercana del lugar.
txtlatitud.setText(String.valueOf(address.getLatitu
de())) y
txtlongitud.setText(String.valueOf(address.getLon
gitude())): Los valores de latitud y longitud se muestran
en los EditText correspondientes para que el usuario los
vea.
} else {
Toast.makeText(this, "No se encontró la ubicación",
Toast.LENGTH_SHORT).show();
}
Si no se encuentra ninguna dirección con el nombre
proporcionado, se muestra un mensaje de error usando
Toast.
Captura de excepciones:
IOException: Si ocurre un error de entrada/salida (por
ejemplo, problemas de red al usar el Geocoder), se
muestra un mensaje de error con Toast.
IllegalArgumentException: Si la ubicación
proporcionada es inválida (por ejemplo, una cadena vacía
o con caracteres no válidos), también se muestra un
mensaje de error.
} else {
Toast.makeText(this, "Por favor ingresa una ubicación",
Toast.LENGTH_SHORT).show();
}
Si el usuario no ha ingresado ninguna ubicación o el
campo de búsqueda está vacío, se muestra un mensaje
pidiéndole que introduzca una ubicación válida.
1. Método onMapClick
Este método se ejecuta cuando el usuario hace un clic corto
(tap) en el mapa.
Paso a paso:
@Override
public void onMapClick(@NonNull LatLng latLng) {
txtlatitud.setText("" + latLng.latitude);
txtlongitud.setText("" + latLng.longitude);
mMap.clear();
2. Método onMapLongClick
Este método es casi idéntico al anterior, pero se ejecuta
cuando el usuario hace un clic prolongado (long click) en
el mapa.
Paso a paso:
@Override
public void onMapLongClick(@NonNull LatLng latLng) {
txtlatitud.setText("" + latLng.latitude);
txtlongitud.setText("" + latLng.longitude);
mMap.clear();