记得打卡 (PunchClock):新手的第一个安卓 APP - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cmos
V2EX    分享创造

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

  •  
  •   cmos 50 天前 1710 次点击
    这是一个创建于 50 天前的主题,其中的信息可能已经有所发展或是发生改变。

    记得打卡 (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  
       50 天前
    钉钉不是有上下班打卡提醒吗 自个定个闹钟不是也行
    ljkgpxs
        2
    ljkgpxs  
       50 天前
    一直都是闹钟提醒,搞 app 嫌麻烦,哈哈哈哈
    chouvel
        3
    chouvel  
       50 天前
    不如引入一些自动化的库,自动打卡。

    不过钉钉应该不可以用。不 root 的话钉钉很容易识别出来。
    cmos
        4
    cmos  
    OP
       50 天前
    @chouvel 3#
    我下一步确实想做自动卡,但是不懂安卓开发,所以现在有点不知道要怎么做。这个 APP 也是之前在 V2EX 发帖询问技术栈,才做出来的。
    mumumi
        5
    mumumi  
       49 天前
    macrodroid 地理围栏自动解锁和打开钉钉,钉钉内部自动打卡。但我的钉钉老是提示作弊,问客服说卸载 fq 软件或 carplay 软件后试试,无语
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4005 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 04:09 PVG 12:09 LAX 20:09 JFK 23:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86