计时器即使可以相当于点击按钮引发事件,但是不需要用户执行任何操作,可以自动出发事件。
使用计时器的过程如下:
case R.id.button_timer://一个button,点击改button后创建一个Timer计时器,后面就不用点击按钮,自动执行run方法33遍,33遍是写在run方法中的。
Timer t=new Timer();//创建Timer对象
player = MediaPlayer.create(this,R.raw.ultragesture);//业务代码,创建MediaPlayer对象
myTaskStart mytaskstart = new myTaskStart();//创建TimerTask对象,Timer要执行的程序写在改类中的run方法中
t.schedule(mytaskstart,5000,7000);//调用Timer.schedule方法使得run中的代码自动重复执行
break;
其中myTaskStart的实现如下:是一个内部类,直接写在MainActivity中就可以了。
class myTaskStart extends TimerTask{
@Override
public void run(){
//开始录音
System.out.println("启动程序");
//count为一个全局变量,该全局变量来控制run的运行次数
if(count<33){
count=count+1;
}
else {
this.cancel();
System.exit(0);
}
//结束使用count控制run的运行次数
//开始更新TextView里面的字符串
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("start"+count);
}
});
//结束更新TextView里面的字符串
player.start();
String fileName = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
audioRecorder.createDefaultAudio(fileName); // status = Status.STATUS_READY;
audioRecorder.startRecord(null);
//等待录音
try {
Thread.sleep(5000);
}
catch (InterruptedException e)
{
Toast.makeText(getApplicationContext(),"异常",Toast.LENGTH_LONG).show();
}
//停止录音
System.out.println("停止录音啊啊啊啊");
audioRecorder.stopRecord();
player.stop();
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("end");
}
});
//在player.stop()后面添加player.prepare(),需要处理异常!
try {
player.prepare();
}
catch (IOException e)
{
System.out.println("player初始化失败!");
}
//结束添加player.prepare
}
}