所需环境:
1、JDK
2、Android SDK
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class DDingAutoClock {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new Task(), 60 * 1000);
}
static class Task extends TimerTask {
public voidrun() {
String str = getCurrentTime();
if(str.equals(“08:00”)){
System.out.println(“定时任务执行”);
//启动叮叮
try {
execCommand(“adb wait-for-device”);
execCommand(“adb shell am start -n com.alibaba.android.rimet/com.alibaba.android.rimet.biz.SplashActivity”);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static StringgetCurrentTime(){
SimpleDateFormat formatter = new SimpleDateFormat (“HH:mm”);
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
String str = formatter.format(curDate);
System.out.println(str);
returnstr;
}
public static void execCommand(Stringcommand) throws IOException {
// start the lscommandrunning
//String[] args = new String[]{“sh”,”-c”,command};
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //这句话就是shell与高级语言间的调用
//如果有参数的话可以用另外一个被重载的exec方法
//实际上这样执行时启动了一个子进程,它没有父进程的控制台
//也就看不到输出,所以我们需要用输出流来得到shell执行后的输出
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
//readthe ls output
String line =””;
StringBuilder sb = new StringBuilder(line);
while((line = bufferedreader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append(“\n”);
}
//使用exec执行不会等执行成功以后才返回,它会立即返回
//所以在某些情况下是很要命的(比如复制文件的时候)
//使用wairFor()可以等待命令执行完成以后才返回
try {
if(proc.waitFor() != 0) {
System.out.println(proc.exitValue());
}
}
catch (InterruptedException e) {
System.err.println(e);
}
}
}