睡在android java中的两个函数之间?

时间:2014-12-14 13:08:15

标签: java android

我上课在我的android项目中录制声音。 在这个类中我有2个函数:start()和stop() 我有一个主要课程,我想从其他活动运行它:记录(第二) 并记录一些时间,并在那些秒后停止播放! 像这样:

start();
//sleep(second)
stop();

我怎么能这样做? 这是我的代码:

package com.example.voicerec;

import java.io.IOException;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.view.View;

public class VoiceR {

private MediaRecorder myRecorder;
private MediaPlayer   myPlayer;
private String        outputFile = null;



public void Record()
{
    outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/momeni.3gpp";
    myRecorder = new MediaRecorder();
    myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.THREE_GPP);
    myRecorder.setOutputFile(outputFile);

}



public void start(View view) {
    try {
        myRecorder.prepare();
        myRecorder.start();
    }
    catch (IllegalStateException e) {
        // start:it is called before prepare()
        // prepare: it is called after start() or before setOutputFormat() 
        e.printStackTrace();
    }
    catch (IOException e) {
        // prepare() fails
        e.printStackTrace();
    }

}



public void stop(View view) {
    try {
        myRecorder.stop();
        myRecorder.release();
        myRecorder = null;

    }
    catch (IllegalStateException e) {
        //  it is called before start()
        e.printStackTrace();
    }
    catch (RuntimeException e) {
        // no valid audio/video data has been received
        e.printStackTrace();
    }
}



public void play(View view) {
    try {
        myPlayer = new MediaPlayer();
        myPlayer.setDataSource(outputFile);
        myPlayer.prepare();
        myPlayer.start();

    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}



public void stopPlay(View view) {
    try {
        if (myPlayer != null) {
            myPlayer.stop();
            myPlayer.release();
            myPlayer = null;

        }
    }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

1 个答案:

答案 0 :(得分:1)

只需创建一个运行开始然后休眠记录时间的线程然后运行停止:

    final int time = second * 1000;
    Thread sound = new Thread(new Runnable() {

        @Override
        public void run() {

            start(view);
            try{
                Thread.sleep(time);
            }catch(Exception e){}
            stop();
        }
    });

sound.start();

或者您可以使用CountDownLatch:

    CountDownLatch latch = new CountDownLatch(1);
    start(view);

    Thread stopping = new Thread(new Runnable() {

        @Override
        public void run() {

            try {
                latch.await();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            stop(view);
        }
    });
    stopping.start();

并在录制过程结束后:

 latch.countDown();