API de utilidad
Tracelet expone una colección de poderosas funciones de utilidad para ayudarlo a depurar, administrar los permisos de la batería e inspeccionar los sensores de hardware subyacentes. Estos son métodos estáticos disponibles directamente en Tracelet.
1. Inspección de hardware y sistema operativo
A veces necesitas saber exactamente en qué tipo de dispositivo se está ejecutando la aplicación o si el hardware admite ciertas funciones (como un contador de pasos).
Obtener la disponibilidad del sensor
Compruebe si el dispositivo tiene un contador de pasos físico (podómetro), acelerómetro o giroscopio.
final sensors = await tl.Tracelet.getSensors();
print('Has Accelerometer: \${sensors.accelerometer}');
print('Has Gyroscope: \${sensors.gyroscope}');
print('Has Step Counter: \${sensors.stepCounter}');Obtener información del dispositivo
Obtenga cadenas OEM detalladas. Esto es extremadamente útil para identificar fabricantes de equipos originales chinos (como Huawei, Xiaomi) que tienen restricciones de fondo agresivas.
final device = await tl.Tracelet.getDeviceInfo();
print('Manufacturer: \${device.manufacturer}');
print('Model: \${device.model}');
print('OS Version: \${device.version}');2. Gestión de energía y batería
El mayor enemigo de la ubicación en segundo plano es el propio sistema operativo. Tracelet proporciona métodos para detectar si el sistema operativo está actualmente limitando su aplicación y métodos para pedirle al usuario que elimine esas restricciones.
Modo de ahorro de energía
Detecta si el usuario ha habilitado el “Modo de bajo consumo” (iOS) o el “Ahorro de batería” (Android). En este modo, el sistema operativo eliminará activamente Tracelet.
final isPowerSaving = await tl.Tracelet.isPowerSaveMode;
if (isPowerSaving) {
print('Warning: Battery Saver is ON. Tracking will be degraded.');
}Exenciones de optimización de la batería (Android)
En Android, debes pedirle al usuario que exima tu aplicación del modo Doze si deseas un seguimiento en segundo plano confiable. Tracelet proporciona una API unificada para esto.
final isExempt = await tl.Tracelet.isIgnoringBatteryOptimizations();
if (!isExempt) {
// Opens the exact Android settings page to whitelist your app
await tl.Tracelet.openBatterySettings();
}3. API del panel de salud
Si un usuario se queja de que el rastreo no funciona, podría deberse a una docena de cosas diferentes: negó el GPS, desactivó el escaneo de Wi-Fi, está en modo de ahorro de energía, etc.
Tracelet compila una carga útil JSON masiva de cada configuración del sistema operativo que podría afectar el seguimiento. Puede cargar esta carga útil en su servidor para depurarla.
final health = await tl.Tracelet.getSettingsHealth();
// Upload to your server or print to console
print('Health Check: \$health');4. Registro y diagnóstico
Tracelet escribe registros de diagnóstico completos directamente en una base de datos SQLite interna (separada de la base de datos de ubicación). Esto es invaluable para depurar problemas en producción.
Obtener los registros
Hay dos formas de recuperar registros y es importante comprender la diferencia entre ellas para evitar confusiones:
1. getLogs(int limit) (Estructurado)
Devuelve un List<LogEntry> estructurado de la base de datos. Esto es mejor cuando necesita mostrar registros en una interfaz de usuario estructurada (como Tracelet Doctor) o procesarlos mediante programación.
// Get the 50 most recent structured log entries
final entries = await tl.Tracelet.getLogs(50);
for (final entry in entries) {
print('[\${entry?.level}] \${entry?.message}');
}2. getLog([SQLQuery query]) (cadena sin formato)
Recupera los registros concatenados como una única cadena masiva. Esto es ideal cuando sólo desea imprimir todo rápidamente en la consola o escribirlo en un archivo de texto.
final logsString = await tl.Tracelet.getLog();
print(logsString);
// Or query specific logs as a string
final errorLogsString = await tl.Tracelet.getLog(
tl.SQLQuery(where: "level = 'ERROR'")
);Borrar los registros
Puede borrar todos los registros almacenados del sistema para restablecer las colas de la base de datos:
await tl.Tracelet.clearLogs();Escribir registros personalizados
Puede inyectar sus propios registros de aplicaciones en la base de datos de registros de Tracelet para que todo esté perfectamente intercalado con los eventos de ubicación en orden cronológico.
await tl.Tracelet.log('INFO', 'User tapped the checkout button');
await tl.Tracelet.log('ERROR', 'Failed to fetch user profile');Registros de envío de correo electrónico
Descargue fácilmente toda la base de datos de registros en un archivo adjunto de correo electrónico para que un usuario pueda enviarlo a su equipo de soporte.
// Opens the native email client with the logs attached
await tl.Tracelet.emailLog('[email protected]');