Lección 7 de 20 · Lectura y práctica
Integrar sensores del dispositivo con Expo Sensors
Concepto claveLos sensores del dispositivo son componentes hardware que capturan datos del entorno físico, como aceleración, orientación, luz o proximidad. En desarrollo móvil, acceder a estos sensores permite crear experiencias.
Del concepto a la práctica
Taller de esta lección
Los sensores producen eventos continuos, así que el problema concreto es controlar frecuencia y ciclo de vida. Para una pantalla que inclina una tarjeta no hace falta guardar cada muestra; basta con actualizar a intervalos razonables y retirar la suscripción al salir.
Ejemplo resuelto
Se reciben tres lecturas del acelerómetro: {x:0.1,y:0.2,z:0.9}, {x:0.2,y:0.2,z:0.9} y {x:0.4,y:0.3,z:0.8}. La interfaz conserva solo la última lectura y muestra x=0.4, y=0.3, z=0.8. Al desmontar la pantalla se llama una vez a remove().
Pruébalo
Define el intervalo de actualización de tu pantalla.
Registra tres muestras con la misma unidad.
Actualiza una sola referencia visible con la última muestra.
Verifica que desmontar cancela la suscripción.
Error frecuente: crear un listener en cada render. Corrígelo registrándolo dentro de un efecto con dependencias estables y limpiándolo en su retorno.
Comprueba tu resultado
Las lecturas del acelerómetro se expresan en unidades g; conserva esa unidad y comprueba disponibilidad en el dispositivo antes de registrar listeners. El registro debe contener tres entradas, la interfaz debe mostrar solo la tercera y el contador de suscripciones activas debe volver a cero después del desmontaje.

Mapa de prácticaUna condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.
Ver la infografía en tamaño completo ↗Concepto clave
Los sensores del dispositivo son componentes hardware que capturan datos del entorno físico, como aceleración, orientación, luz o proximidad. En desarrollo móvil, acceder a estos sensores permite crear experiencias inmersivas y contextuales. Expo Sensors proporciona una capa unificada para interactuar con estos sensores sin necesidad de código nativo, simplificando el desarrollo multiplataforma.
Imagina que estás construyendo una aplicación de fitness que usa el acelerómetro para contar pasos, o un juego que utiliza el giroscopio para controlar movimientos. Sin Expo Sensors, tendrías que escribir código específico para iOS y Android, aumentando la complejidad. Con Expo Sensors, usas una API JavaScript consistente, similar a cómo un control remoto universal opera diferentes marcas de televisores con los mismos botones.
Cómo funciona en la práctica
Expo Sensors funciona mediante módulos que exponen métodos para suscribirse a actualizaciones de sensores. Primero, instalas el paquete correspondiente (por ejemplo, expo-sensors). Luego, importas el sensor específico y usas sus métodos para iniciar la escucha. Los datos llegan como objetos JavaScript con propiedades como x, y, z para movimiento, o brightness para luz.
Paso a paso: 1) Importa el sensor desde expo-sensors. 2) Usa useEffect en React para manejar el ciclo de vida. 3) Llama a Sensor.addListener para suscribirte a actualizaciones. 4) Procesa los datos en una función callback. 5) Limpia el listener al desmontar el componente para evitar fugas de memoria. Esto asegura que la aplicación responda en tiempo real a cambios del sensor.
Codigo en accion
Aquí un ejemplo funcional que usa el acelerómetro para mostrar datos de movimiento en una app Expo:
import React, { useState, useEffect } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import { Accelerometer } from 'expo-sensors';
export default function App() {
const [data, setData] = useState({ x: 0, y: 0, z: 0 });
useEffect(() => {
const subscription = Accelerometer.addListener(accelerometerData => {
setData(accelerometerData);
});
Accelerometer.setUpdateInterval(100); // Actualiza cada 100ms
return () => subscription.remove();
}, []);
return (
x: {data.x.toFixed(2)}\ny: {data.y.toFixed(2)}\nz: {data.z.toFixed(2)}
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
text: { fontSize: 18 }
});Antes de optimizar, podrías olvidar limpiar el listener, causando fugas. Después, con el return en useEffect, garantizas que se remueva al desmontar. Para mejorar, podrías agregar un umbral para filtrar datos mínimos y ahorrar batería:
// Mejora: Filtrar datos menores a 0.1
useEffect(() => {
const subscription = Accelerometer.addListener(accelerometerData => {
if (Math.abs(accelerometerData.x) > 0.1 || Math.abs(accelerometerData.y) > 0.1 || Math.abs(accelerometerData.z) > 0.1) {
setData(accelerometerData);
}
});
Accelerometer.setUpdateInterval(100);
return () => subscription.remove();
}, []);Errores comunes
- No limpiar listeners: Olvidar remover suscripciones en
useEffectcausa fugas de memoria y errores en actualizaciones. Siempre usa un return para limpiar. - Intervalos de actualización muy rápidos: Configurar intervalos menores a 16ms (60fps) puede saturar el hilo principal y drenar batería. Usa valores como 100-500ms según la necesidad.
- Asumir disponibilidad del sensor: No todos los dispositivos tienen todos los sensores. Verifica con
Sensor.isAvailableAsync()antes de usarlos. - Ignorar permisos: Algunos sensores requieren permisos en tiempo de ejecución. Usa
expo-permissionso APIs modernas para solicitarlos. - Procesar datos en el hilo principal: Operaciones complejas con datos de sensores pueden bloquear la UI. Mueve el procesamiento a un Web Worker si es intensivo.
Checklist de dominio
- Instalar y configurar Expo Sensors en un proyecto Expo.
- Implementar al menos dos sensores diferentes (ej., acelerómetro y giroscopio) con suscripciones.
- Manejar correctamente el ciclo de vida de listeners con useEffect y cleanup.
- Optimizar el intervalo de actualización para balancear rendimiento y precisión.
- Verificar disponibilidad del sensor y permisos antes de usarlo.
- Probar la app en dispositivos reales para validar el comportamiento del sensor.
- Documentar el uso de sensores en el código para mantenibilidad.
Crear una brújula digital con Expo Sensors
Desarrolla una aplicación que muestre una brújula digital usando el magnetómetro de Expo Sensors. Sigue estos pasos:
- Crea un nuevo proyecto Expo con
npx create-expo-app compass-app. - Instala Expo Sensors:
npx expo install expo-sensors. - En
App.js, importaMagnetometerdeexpo-sensorsy componentes de React Native. - Usa
useStatepara almacenar el ángulo de orientación yuseEffectpara suscribirte al magnetómetro. - Calcula el ángulo en grados desde los datos del magnetómetro (x, y) usando
Math.atan2(y, x) * (180 / Math.PI). - Muestra el ángulo en una pantalla con un texto y una imagen que rote según la orientación.
- Agrega un botón para calibrar el sensor reiniciando los datos.
- Prueba la app en un dispositivo físico moviéndolo para ver cambios en tiempo real.
Pistas
- Usa
Magnetometer.setUpdateInterval(100)para actualizaciones suaves. - Normaliza el ángulo a 0-360 grados con
(angle + 360) % 360para evitar valores negativos. - Para la rotación de imagen, aplica un estilo
transform: [{ rotate: `${angle}deg` }].
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con Desarrollo Avanzado de Aplicaciones con Expo: De Concepto a Producción
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.