目录
前言
本文章旨在提供一种新的思路,在 无需 Root 的情况下,实现自动化钉钉定时打卡,更多是为了自己方便而定制开发,所以很多功能的实现局限性较大
MIUI 用户可以直接使用该 APP 实现自动考勤
1.需求分析
公司考勤调整过后,需要使用钉钉一天打四次卡:08:30 前上班卡;12:00 后下班卡;13:30 前上班卡;18:00 后下班卡。防止中午午休时缺卡,现有如下需求:
到点自动启动钉钉进行打卡并息屏
需求具体化,梳理上班、下班考勤流程( 钉钉默认 上班打卡 启用 极速打卡,而 下班打卡 则是 手动打卡 )

涉及功能点
- 亮屏
- 息屏
- 屏幕解锁
- 启动钉钉
- 模拟用户操作
- 保活
2.效果展示

图中展示的下班打卡效果,上班打卡效果则更为简单:唤醒屏幕并解锁,启动钉钉(触发极速打卡)后息屏。

3.功能实现
3.1 亮屏
当触发打卡功能时,首先需要判断屏幕是否处于亮屏状态,非亮屏状态则唤醒屏幕
通过 PowerManager 实现,需要声明权限:
<!-- 允许应用程序使用电源管理器的屏幕锁功能 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
示例代码:
private fun wakeUpScreen(context: Context, tag: String) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
//是否需要亮屏唤醒屏幕
if (!powerManager.isInteractive) {
val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wl = pm.newWakeLock(
PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_DIM_WAKE_LOCK,
tag
)
wl.acquire(60 * 1000L /*1 minutes*/)
wl.release()
}
}
3.2 息屏
通过 DevicePolicyManager 实现
1.自定义设备管理器启用状态监听器(点击跳转查看源码)<