Android 实现钉钉自动打卡功能
提前准备
首先我们需要一直不用的Android手机,插上公司的电源。下载安装钉钉并设置为极速打卡。
自动打开
我们只需要启动一个服务,定时打开钉钉应用后再返回即可。
防止熄屏
这华为手机并没有永不息屏的选项,所以我们需要设置一下防止自动息屏。
@Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //设置不自动息屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.activity_main); }
打开钉钉,签到后返回
核心程序
/** * *@parampackageName包名 */ publicvoidopenApplication(StringpackageName){ PackageManagerpackageManager=getPackageManager(); PackageInfopi=null; try{ pi=packageManager.getPackageInfo(packageName,0); }catch(PackageManager.NameNotFoundExceptione){ } IntentresolveIntent=newIntent(Intent.ACTION_MAIN,null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); Listapps=packageManager.queryIntentActivities(resolveIntent,0); ResolveInforesolveInfo=apps.iterator().next(); if(resolveInfo!=null){ StringclassName=resolveInfo.activityInfo.name; Intentintent=newIntent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentNamecn=newComponentName(packageName,className); intent.setComponent(cn); startActivity(intent); } }
- 打开cmd查找钉钉的包名
adbdevices
adbshell
pmlistpackage|grepalibaba查找阿里巴巴相关的所有包名,也可以直接pmlistpackage查找所有包名
//打开钉钉 StringpackageName="com.alibaba.android.rimet"; openApplication(packageName); //延迟2s,自动打开 try{ Thread.sleep(2000); }catch(InterruptedExceptione){ e.printStackTrace(); } //返回自动打卡app StringpackageNameNew="com.example.dingding"; openApplication(packageNameNew);
创建一个service来进行自动打卡,使用java的cron4j库来执行定时任务,使用可以参见以前的博客。JFinal用cron4j执行定时任务
- cron4j.jar下载地址
publicclassDingServiceextendsService{ privatefinalStringTAG="DingService"; @Override publicIBinderonBind(Intentintent){ returnnull; } @Override publicvoidonCreate(){ super.onCreate(); Log.e(TAG,"ServiceStart!"); ClockThreadct=newClockThread(); ct.start(); } @Override publicintonStartCommand(Intentintent,intflags,intstartId){ returnsuper.onStartCommand(intent,flags,startId); } @Override publicvoidonDestroy(){ super.onDestroy(); } /** * *@parampackageName包名 */ publicvoidopenApplication(StringpackageName){...} publicclassClockThreadextendsThread{ publicvoidrun(){ Schedulerscheduler=newScheduler(); //设置打开时间为工作日的7:50,11:50,13:50,17:50 scheduler.schedule("507,11,13,17**mon,tue,wed,thu,fri",newThread(){ @Override publicvoidrun(){ StringpackageName="com.alibaba.android.rimet"; openApplication(packageName); try{ Thread.sleep(2000); }catch(InterruptedExceptione){ e.printStackTrace(); } StringpackageNameNew="com.example.dingding"; openApplication(packageNameNew); } }); scheduler.start(); } } }
最后在MainActivity中启动服务即可。
随机时间
为了让打卡更加真实,每天的打卡时间尽可能尽量不一样。我们用一个Scheduler(调度任务)每天在固定时间如每天早上6点,创建四个时间随机的调度任务来完成每日的打卡。
publicclassClockThreadextendsThread{ publicvoidrun(){ scheduler=newScheduler(); scheduler.schedule("06**mon,tue,wed,thu,fri",newThread(){ @Override publicvoidrun(){ if(scheduler1!=null){ scheduler1.stop(); scheduler1=null; } if(scheduler2!=null){ scheduler2.stop(); scheduler2=null; } if(scheduler3!=null){ scheduler3.stop(); scheduler3=null; } if(scheduler4!=null){ scheduler4.stop(); scheduler4=null; } //随机在7:00~7:27之间打卡 //scheduler1scheduler.schedule(newRandom().nextInt(28)+"7***",newThread()) //随机在11:30~11:57之间打卡 //scheduler2scheduler.schedule((30+newRandom().nextInt(28))+"11***",newThread()) //随机在13:00~13:27之间打卡 //scheduler3scheduler.schedule(newRandom().nextInt(28)+"13***",newThread()) //随机在17:30~17:57之间打卡 //scheduler4scheduler.schedule((30+newRandom().nextInt(28))+"17***",newThread()) } }); scheduler.start(); } }
以上就是Android实现钉钉自动打卡功能的详细内容,更多关于Android钉钉自动打卡的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。