一个专为Rokid Glasses和佳明手表设计的Android应用,通过蓝牙标准服务实时获取和显示运动数据。 我只测试了我自己的手表佳明255,根据其他用户的反馈,部分佳明手表连接后可能并不能显示数据,说明佳明不同型号的蓝牙广播格式应该是不同的 我确实没办法购买所有的佳明手表来测试和兼容,好在这是个开源项目,建议大家在安卓手机上下载一个nRconnect软件连接自己的手表运动模式,订阅里面的的服务并进行抓包 将抓包的LOG分析一下即可兼容自己的手表
左图:应用主界面,显示设备连接状态;右图:数据显示界面,实时显示运动数据
Runsight是一个轻量级的Android应用,专门用于连接佳明(Garmin)智能手表,通过蓝牙低功耗(BLE)技术获取实时运动数据。应用采用简洁的界面设计,专注于核心功能的实现。
- 蓝牙设备扫描: 自动扫描并识别佳明手表设备
- 实时数据获取: 通过RSC(Running Speed and Cadence)和HRM(Heart Rate Monitor)服务获取运动数据
- 数据实时显示: 显示心率、配速、距离、步频等运动指标
- 双页面模式: 支持主页面和数据页面切换
- 亮度控制: 支持通过按键调节屏幕亮度
- 权限管理: 自动处理蓝牙和位置权限请求
- 轻量化设计: 移除了复杂的UI框架,使用传统Android View系统
- 标准蓝牙服务: 基于蓝牙标准服务协议,兼容性更好
- 实时数据处理: 高效的数据解析和显示机制
- 简洁架构: MVVM架构模式,代码结构清晰
- 正式签名: 支持APK签名,可正式发布到应用商店
app/
├── src/main/java/com/mouzhi/runsight/
│ ├── SimpleMainActivity.kt # 主Activity,处理UI和用户交互
│ ├── ui/
│ │ ├── viewmodel/
│ │ │ └── RunSightViewModel.kt # 数据管理和业务逻辑
│ │ └── theme/ # UI主题配置
│ ├── data/
│ │ ├── models/ # 数据模型
│ │ └── repository/ # 数据仓库层
│ ├── bluetooth/
│ │ └── BluetoothManager.kt # 蓝牙连接和数据获取
│ └── utils/
│ ├── BrightnessManager.kt # 亮度控制
│ └── DebugLogger.kt # 调试日志
└── src/main/AndroidManifest.xml # 应用配置和权限声明
- Android 6.0 (API 23) 或更高版本
- 支持蓝牙低功耗(BLE)的设备
- 佳明智能手表(支持RSC和HRM服务)
- 安装应用: 下载并安装APK文件
- 授予权限: 首次启动时授予蓝牙和位置权限
- 连接手表: 应用会自动扫描并连接佳明手表
- 查看数据: 连接成功后即可查看实时运动数据
- 页面切换: 按确认键(DPAD_CENTER)切换主页面和数据页面
- 亮度调节: 使用左右方向键调节屏幕亮度
- 确认键:切换页面模式(首页 → 数据页 → 竞赛页 → 首页)
- 左方向键:降低屏幕亮度
- 右方向键:增加屏幕亮度
- 重置比赛起点:连续做一次“右滑”后在1.5秒内“左滑”,或“左滑”后在1.5秒内“右滑”
- 效果:清零竞赛页显示的“距离”和“跑步时间”,并显示提示语“已重置比赛起点”(1.5秒)
- 说明:第二页的原始距离保留,用于后续精确积分计算;竞赛页显示距离=原始距离差值+修正量
- 修正距离(只影响竞赛页显示):
- 双左滑(≤800ms):向下取整;如果当前已为整数或5秒内再次修正,则直接-1km(不低于0)
- 双右滑(≤800ms):向上取整;如果当前已为整数或5秒内再次修正,则直接+1km
- 预计用时:按“已用时 + 剩余距离 × 实时配速”实时计算;实时配速缺失时回退平均配速
- 开发工具: Android Studio
- 编程语言: Kotlin
- 最低SDK: API 23 (Android 6.0)
- 目标SDK: API 34 (Android 14)
- 构建工具: Gradle 8.13
- 安装Android Studio
- 配置Android SDK
- 克隆项目到本地
# 克隆项目
git clone https://github.com/mouzhi/Runsight.git
cd Runsight
# 编译调试版本
./gradlew assembleDebug
# 编译发布版本
./gradlew assembleRelease -x lintVitalAnalyzeRelease# 安装调试版本
adb install app/build/outputs/apk/debug/app-debug.apk
# 安装发布版本(已签名)
adb install app/build/outputs/apk/release/app-release.apk你也可以直接从GitHub Releases页面下载最新版本的APK文件:
Runsight-v1.3.1-signed.apk- 正式发布版本(推荐)
应用使用以下标准蓝牙服务获取数据:
- RSC服务 (Running Speed and Cadence): 获取跑步速度、配速、距离等数据
- HRM服务 (Heart Rate Monitor): 获取心率数据
这些都是蓝牙标准服务,具有良好的设备兼容性。
-
无法发现设备
- 确保手表蓝牙已开启
- 检查应用权限是否已授予
- 尝试重启蓝牙功能
-
连接失败
- 确保手表处于可连接状态
- 检查手表是否已与其他设备配对
- 尝试重启应用
-
数据不更新
- 确保手表处于运动模式
- 检查RSC和HRM服务是否可用
- 查看调试日志获取详细信息
- 新增:竞赛页“跑步时间 hh:mm”显示,重置起点后从0计时
- 新增:组合操作重置起点(左→右或右→左),清零显示距离与跑步时间
- 新增:双左滑/双右滑距修(仅影响竞赛页显示)
- 双左滑:向下取整;若已整数或5秒内再次修正,则直接-1km
- 双右滑:向上取整;若已整数或5秒内再次修正,则直接+1km
- 与亮度增减并存,不互相影响
- 优化:竞赛页右侧“配速/步频/心率”整体下移一行,布局更清晰
- 算法:预计用时 = 已用时 + 剩余距离 × 实时配速;实时配速不可用时回退平均配速
- 竞赛页距离来源:以第二页原始距离(蓝牙速度积分)为基线,重置后以“原始距离差值 + 人工修正”显示
- 新增:第三个竞赛仪表页,安全显示区域适配(480×400)
- 新增:比赛起点重置提示与组合操作(左→右或右→左)
- 优化:日期与电量移至不安全上下边区域,避免遮挡核心信息
- 更新:预计完赛显示为“预计用时”,算法基于剩余距离×实时配速 + 已用时
- 新增:应用前台运行时保持屏幕常亮
- 新增:返回桌面后自动恢复系统5秒息屏策略
- 优化:在具备系统写权限时进入前台提高系统息屏超时,退出时自动恢复原值
- 修复左右按键亮度调节功能失效问题
- 添加APK签名配置,支持正式发布
- 更新版本号和构建配置
- 生成可正式发布的签名APK文件
- 完善项目文档和截图展示
- 重构项目架构,移除冗余代码
- 优化蓝牙连接稳定性
- 简化UI界面,提升性能
- 修复数据显示位置问题
- 初始版本发布
- 基本的蓝牙连接功能
- 运动数据获取和显示
- 佳明设备集成
欢迎提交Issue和Pull Request来改进项目。
- 使用Kotlin编程语言
- 遵循Android开发最佳实践
- 保持代码简洁和注释完整
- 提交前进行充分测试
本项目采用MIT许可证,详见LICENSE文件。
- 项目地址: https://github.com/mouzhi/Runsight
- 问题反馈: 请在GitHub上提交Issue
注意: 本应用专为佳明手表设计,其他品牌设备的兼容性可能有限。
This repository contains the Runsight project, an Android application for fitness tracking and data analysis.
- Real-time heart rate monitoring
- Running speed and cadence tracking
- Data synchronization with external devices
- Clone the repository.
- Open the project in Android Studio.
- Build and run the application on a compatible device.
This project is licensed under the MIT License.

