V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cmos
V2EX  ›  分享创造

记得打卡 (PunchClock):新手的第一个安卓 APP

  •  
  •   cmos · 2 天前 · 926 次点击

    记得打卡 (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 主题配置
    
    5 条回复    2025-10-14 14:19:44 +08:00
    v0rtix
        1
    v0rtix  
       2 天前
    钉钉不是有上下班打卡提醒吗 自个定个闹钟不是也行
    ljkgpxs
        2
    ljkgpxs  
       2 天前
    一直都是闹钟提醒,搞 app 嫌麻烦,哈哈哈哈
    chouvel
        3
    chouvel  
       2 天前
    不如引入一些自动化的库,自动打卡。

    不过钉钉应该不可以用。不 root 的话钉钉很容易识别出来。
    cmos
        4
    cmos  
    OP
       2 天前
    @chouvel 3#
    我下一步确实想做自动打卡,但是不懂安卓开发,所以现在有点不知道要怎么做。这个 APP 也是之前在 V2EX 发帖询问技术栈,才做出来的。
    mumumi
        5
    mumumi  
       2 天前
    macrodroid 地理围栏自动解锁和打开钉钉,钉钉内部自动打卡。但我的钉钉老是提示作弊,问客服说卸载 fq 软件或 carplay 软件后试试,无语
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3323 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:01 · PVG 19:01 · LAX 04:01 · JFK 07:01
    ♥ Do have faith in what you're doing.