实用程序API
Tracelet 公开了一系列强大的实用函数,可帮助您调试、管理电池权限和检查底层硬件传感器。这些是直接在 Tracelet 上可用的静态方法。
1. 硬件和操作系统检查
有时您需要确切地知道应用程序正在运行的设备类型,或者硬件是否支持某些功能(例如计步器)。
获取传感器可用性
检查设备是否具有物理计步器(计步器)、加速计或陀螺仪。
final sensors = await tl.Tracelet.getSensors();
print('Has Accelerometer: \${sensors.accelerometer}');
print('Has Gyroscope: \${sensors.gyroscope}');
print('Has Step Counter: \${sensors.stepCounter}');获取设备信息
获取详细的 OEM 字符串。这对于识别具有严格背景限制的中国原始设备制造商(如华为、小米)非常有用。
final device = await tl.Tracelet.getDeviceInfo();
print('Manufacturer: \${device.manufacturer}');
print('Model: \${device.model}');
print('OS Version: \${device.version}');2. 电源和电池管理
后台定位的最大敌人是操作系统本身。 Tracelet 提供了检测操作系统当前是否正在限制您的应用程序的方法,以及要求用户解除这些限制的方法。
省电模式
检测用户是否启用了“低功耗模式”(iOS) 或“省电模式”(Android)。在这种模式下,操作系统会主动杀死Tracelet。
final isPowerSaving = await tl.Tracelet.isPowerSaveMode;
if (isPowerSaving) {
print('Warning: Battery Saver is ON. Tracking will be degraded.');
}电池优化豁免 (Android)
在 Android 上,如果您想要可靠的后台跟踪,则必须要求用户使您的应用程序免于打瞌睡模式。 Tracelet 为此提供了统一的 API。
final isExempt = await tl.Tracelet.isIgnoringBatteryOptimizations();
if (!isExempt) {
// Opens the exact Android settings page to whitelist your app
await tl.Tracelet.openBatterySettings();
}3.健康仪表板API
如果用户抱怨跟踪不起作用,可能有十几种不同的原因:他们拒绝使用 GPS、关闭 Wi-Fi 扫描、处于省电模式等。
Tracelet 编译可能影响跟踪的每个操作系统设置的大量 JSON 有效负载。您可以将此负载上传到您的服务器进行调试。
final health = await tl.Tracelet.getSettingsHealth();
// Upload to your server or print to console
print('Health Check: \$health');4. 日志记录和诊断
Tracelet 将全面的诊断日志直接写入内部 SQLite 数据库(与位置数据库分开)。这对于调试生产中的问题非常有价值。
获取日志
检索日志的方法有两种,了解它们之间的区别以避免混淆非常重要:
1. getLogs(int limit)(结构化)
从数据库返回结构化的 List<LogEntry>。当您需要在结构化 UI(如 Tracelet Doctor)中显示日志或以编程方式处理日志时,这是最好的选择。
// 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])(原始字符串)
检索连接为单个大字符串的日志。当您只想快速将所有内容打印到控制台或将其写入文本文件时,这是理想的选择。
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'")
);清除日志
您可以清除所有存储的系统日志以重置数据库队列:
await tl.Tracelet.clearLogs();编写自定义日志
您可以将自己的应用程序日志注入 Tracelet 日志数据库,以便所有内容都按时间顺序与位置事件完美交错。
await tl.Tracelet.log('INFO', 'User tapped the checkout button');
await tl.Tracelet.log('ERROR', 'Failed to fetch user profile');通过电子邮件发送日志
轻松将整个日志数据库转储到电子邮件附件中,以便用户可以将其发送给您的支持团队。
// Opens the native email client with the logs attached
await tl.Tracelet.emailLog('[email protected]');