记得打卡 (PunchClock)
一个简洁易用的打卡考勤记录应用,用于记录工作时间,以及统计工作与加班情况。一直忘记打卡,肉疼,于是配合手机自动任务的地理围栏,写了这个程序,到办公室了就提醒我去打卡,还能顺便记录工作时间。作为安卓纯新手,此前在 V2EX 提问过技术栈,感谢小伙伴们的回复,我才最终完整了现在的这个版本。之前使用 Java 在 Ubuntu server w/o GUI 写的,现在这个是用 Kotlin 在 Android Studio 实现的。哦,对了,展示的数据都是我的真实上班时间。
GitHub 地址 uselibrary/PunchClock
📱 应用简介
记得打卡是一款基于 Android 平台的打卡时间管理应用,使用 Jetpack Compose 构建现代化 UI ,支持上下班打卡、历史记录查询、工作时间统计分析等功能。
✨ 主要功能
1. 打卡记录
- ✅ 上班打卡/下班打卡
- ⏰ 实时显示当前时间
- 📝 今日打卡状态预览
- ✏️ 支持长按编辑打卡时间
- ❌ 支持取消已打卡记录
2. 历史记录
- 📅 查看所有打卡历史
- 🕐 显示上下班时间及工作时长
- 📊 按日期倒序排列
3. 工作时间分析
- 📈 支持周视图和月视图切换
- 📊 可视化图表展示每日工作时长
- 🔍 点击图表查看单日详细信息
-
📉 自动计算统计数据:
- 总工作时间
- 平均每日工时
- 周/月工作天数
- 累计加班时间
- 平均每日加班时间
- 周/月加班天数占比
4. 数据备份与恢复
- 💾 导出打卡数据为 JSON 格式
- 📥 导入备份数据恢复记录
- 🔄 支持跨设备数据迁移
📊 数据说明
工作时长计算
- 正常工时: ≤8 小时/天 (绿色显示)
- 加班工时: >8 小时/天 (橙色显示)
- 8 小时红色虚线: 标准工作时长参考线
统计维度
-
周视图: 显示一周(周一至周日)工作情况
-
月视图: 显示整月工作情况
-
自动计算: 总工时、平均工时、加班统计等
🛠️ 技术栈
- 开发语言: Kotlin
- UI 框架: Jetpack Compose
-
架构组件:
- Navigation Compose (导航)
- Material 3 (Material Design 3)
- 数据存储: SQLite
- 最低支持: Android 10 (API 29)
- 目标版本: Android 14 (API 36)
📦 项目结构
app/src/main/java/com/qiecou/punchclock/
├── MainActivity.kt # 主 Activity 和主界面
├── WorkTimeAnalysisScreen.kt # 工作时间分析界面
├── PunchRecord.kt # 打卡记录数据模型
├── DatabaseHelper.kt # SQLite 数据库操作
├── DataBackupManager.kt # 数据备份和导入导出管理
└── ui/theme/ # UI 主题配置