之前公司一直是弹性工作制 以工作任务为目标 自由上下班
日子过的不亦乐乎
自从人事来了以后 就颁布了第一条法令
看到这个无疑的痛苦的 对于一个几年没有打卡散人来说!!!
同时公司的财务小姐姐和其他同事也硬邀 工程师来开发一个脚本任务 来执行自动打卡
听起来好像还不错
为了大家的福利 说干就撸起袖子
准备工作
要先完成app之间的跳转
首先先拿到企业微信的包名和钉钉的包名
这个无论你是adb命令实现 还是百度直接找 都很方便
ADB命令方式
[ol]
[/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();
}
实现效果
总结
在帮助大家同时 自己又学习了知识 何乐而不为呢?啊哈哈哈