实现企业微信自动打卡任务同时支持钉钉急速打卡模式

查看 232|回复 25
作者:lyudony   
前言
之前公司一直是弹性工作制 以工作任务为目标 自由上下班
日子过的不亦乐乎
自从人事来了以后 就颁布了第一条法令

看到这个无疑的痛苦的 对于一个几年没有打卡散人来说!!!
同时公司的财务小姐姐和其他同事也硬邀 工程师来开发一个脚本任务 来执行自动打卡
听起来好像还不错
为了大家的福利 说干就撸起袖子

准备工作
要先完成app之间的跳转
首先先拿到企业微信的包名和钉钉的包名
这个无论你是adb命令实现 还是百度直接找 都很方便
ADB命令方式

[ol]
  • 依旧数据线连接手机,注意都是调试模式哈,不然电脑无权访问手机
  • 电脑端Crtl+R  输入cmd 回车
  • 输入 adb devices  检验是否成功连接手机
  • 输入 adb shell  进入手机的shell
  • 输入 pm list packages  显示所有应用包名
    [/ol]


    通过命令获取到 钉钉的包名:com.alibaba.android.rimet
    通过命令获取到 企业微信的包名:com.tencent.wework
    也可以直接百度搜

    拿到包名以后要做的任务 就是启动定时器完成应用跳转 达到唤醒应用的效果
    因为企业微信和钉钉急速打卡只要打开app在指定的打卡范围内就可以自动打卡
    ok 我们已知这个条件以后 就很方便写程序了
    实现流程
    启动前台服务
    //启动服务
    Intent intentService = new Intent(MainActivity.this, AutomaticTaskService.class);
    startService(intentService);
    不断的刷新通知任务
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
            builder.setSmallIcon(R.mipmap.timer_task);
            builder.setContentTitle("新消息").setContentText("这是一条定时任务");      
            startForeground(1, builder.build());
    在服务中起了一个定时的线程来根据设置的时间跳转指定包名的app
       new Thread() {
                @Override
                public void run() {
                    super.run();
                    while (isRun) {
                        //你需要执行的任务
                        try {
                            Thread.sleep(50000);
                        } catch (InterruptedException es) {
                            es.printStackTrace();
                        }
                        //实例化SharedPreferences对象(第一步)
                        SharedPreferences mySharedPreferences = getSharedPreferences("shared", Activity.MODE_PRIVATE);
                        String starTime = mySharedPreferences.getString("startTime", "");
                        String endTime = mySharedPreferences.getString("endTime", "");
                        Log.e(TAG, " starTime -------- " + starTime);
                        Log.e(TAG, " endTime  --------- " + endTime);
                        String strTime = getSystemTime() + "";
                        strTime = strTime.substring(0, 5);
                        Log.e(TAG, " 系统时间 --------- " + strTime);
                        if (strTime.equals(starTime)) {
                            //设置了上班打卡时间
                            ImplementUtils.openTask(getBaseContext());
                        } else if (strTime.equals(endTime)) {
                            //设置了下班打卡时间
                            ImplementUtils.openTask(getBaseContext());
                        }
                    }
                }
            }.start();     
            //走OnDestory停止的服务,系统保留了service的onStartCommand方法中的变量,等待系统重启此服务
            return START_STICKY;
        }
    应用跳转那块的代码都是死的

            //设置意图
            Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
            resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            if (packageInfo != null) {
                resolveIntent.setPackage(packageInfo.packageName);
            }
            List apps = packageManager.queryIntentActivities(resolveIntent, 0);
            ResolveInfo resolveInfo = apps.iterator().next();
            if (resolveInfo != null && packageInfo != null) {
                String className = resolveInfo.activityInfo.name;
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.addCategory(Intent.CATEGORY_LAUNCHER);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                Log.e(TAG, "packageName ------------" + packageInfo.packageName);
                ComponentName cn = new ComponentName(packageInfo.packageName, className);
                intent.setComponent(cn);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
                pendingIntent.send();
             }
    实现效果

    总结
    在帮助大家同时 自己又学习了知识 何乐而不为呢?啊哈哈哈

    跳转, 在这里

  • lyudony
    OP
      

    经过几天的测试和修复bug  
    一个1mb的apk诞生了
    今天早上8.35打的卡 而我9点才来公司
    哈哈啊哈
    lyudony
    OP
      

    ----------------------- 无图言D
    lyudony
    OP
      

    福利来了
    https://wws.lanzoui.com/iRK8esaovdg
    密码:52pj
    更新内容:
    支持android手机息屏后唤醒屏幕打卡
    打完卡后手机自动息屏即可
    要打卡的手机 不要打开指纹 数字 手势等锁屏 就正常息屏 是没问题的
    if (strTime.equals(starTime)) {
    //设置了上班打卡时间
    ImplementUtils.openTask(getBaseContext());
    wakeUpAndUnlock(context);
    } else if (strTime.equals(endTime)) {
    //设置了下班打卡时间
    ImplementUtils.openTask(getBaseContext());
    wakeUpAndUnlock(context);
    } else if (strTime.equals("10:00")) {
    //设置断开连接
    Log.e(TAG, "执行了 断开连接");
    SilentUtils.launchApp(getApplication().getBaseContext(), "model.com.app.lyudony");
    wakeUpAndUnlock(context);
    } else if (strTime.equals("22:00")) {
    //设置断开连接
    Log.e(TAG, "执行了 断开连接");
    SilentUtils.launchApp(getApplication().getBaseContext(), "model.com.app.lyudony");
    wakeUpAndUnlock(context);
    }
    lyudony
    OP
      


    浮生丶梦滥 发表于 2021-7-27 17:16
    昨晚下载试过了,好像不行,设置好时间之后,到点了没有反应

    https://wws.lanzoui.com/iRK8esaovdg
    密码:52pj
    更新内容:
    支持android手机息屏后唤醒屏幕打卡
    打完卡后手机自动息屏即可
    要打卡的手机 不要打开指纹 数字 手势等锁屏 就正常息屏 是没问题的
    lyudony
    OP
      

    三张图说明一切
    目标
    完成
    lyudony
    OP
      

    实现效果图
    lyudony
    OP
      

    感谢大家支持!
    我已将源码分析
    具体地址 https://www.52pojie.cn/thread-1612172-1-1.html  
    如有帮助  请给个star ~
    lyudony
    OP
      

    代码开源地址:https://github.com/lvlife/AutomaticTask
    Bakura   


    领悟者的涂鸦笔 发表于 2021-7-22 15:58
    人事专门干不是人干的事。
    人事没有生产力,只能通过得罪人来体现自己的存在价值

    因为人事是站在老板的立场的,有些人时间长了,潜移默化也认为自己是老板了吧,
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部