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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。