Skip to content

Mi Ubicación — El GPS

El GPS de tu teléfono funciona igual que el de un auto: triangula tu posición usando señales de satélites. Pero en móviles hay una capa extra de seguridad: el Permiso de Ubicación.

Gestionar un sensor no es algo instantáneo. La app pasa por varias etapas que debemos controlar para no “romper” la experiencia del usuario (UX).

idle

Esperando acción del usuario

🟡
cargando

Solicitando satélites y permisos

🟢
obtenida

Coordenadas listas para el mapa

🔴
permisoDenegado

Acceso bloqueado por el usuario

Escribir esta lógica en cada pantalla sería un error. Creamos un Hook para centralizar la complejidad. Es como tener un “mando a distancia” que cualquier pantalla puede usar.

// 📌 Concepto: Encapsulamiento de lógica asíncrona
// Gestionar el GPS es complejo (permisos, errores, carga).
// Al crear un "Hook" (useUbicacion), limpiamos la pantalla principal de código aburrido.
export const useUbicacion = () => {
// 🚦 'idle' significa quieto, 'cargando' buscando satélites, 'obtenida' éxito.
const [estado, setEstado] = useState('idle');
const [coordenadas, setCoordenadas] = useState(null);
const solicitar = async () => {
setEstado('cargando');
// ⚠️ El Sistema Operativo (Android/iOS) exige que el usuario acepte que la app lo rastree.
// Foreground significa "solo mientras la app está abierta y en pantalla".
const { status } = await Location.requestForegroundPermissionsAsync();
// 🛑 Si el usuario dice "No", no podemos hacer nada. Debemos respetar su privacidad.
if (status !== 'granted') {
setEstado('permisoDenegado');
return;
}
// 🎯 Una vez con permiso, pedimos la posición actual.
// Esto puede tardar según si el usuario está bajo techo o en la calle.
const loc = await Location.getCurrentPositionAsync({});
setCoordenadas(loc.coords);
setEstado('obtenida');
};
// 🎁 Devolvemos estas tres cosas para que la pantalla sepa qué mostrar.
return { estado, coordenadas, solicitar };
};

El usuario es el dueño de sus datos. Debemos ser claros en por qué pedimos la ubicación.

AcciónResultado en la App
✅ PermiteGPS activo, marcador centrado en el mapa.
❌ NiegaMuestra tarjeta de error y botón para reintentar.

Nota cómo la UI cambia totalmente según el estado del hook. Si el permiso es denegado, usamos el color neon-pink para alertar visualmente.