0
我正在制作一个录制音频的示例程序。我有一个用于启动和停止录制的按钮。我正在运行一个线程,以便我可以录制到30 sec.My的问题是,在达到30秒前,如果我点击stopButton,我的应用程序不幸停止。现在我没有得到问题。 以下是我的代码:无法停止音频录制,线程无法正常工作,并且应用程序不幸停止
public class AudioRecordingActivity extends Activity {
private Button RecordButton;
boolean recording;
MediaRecorder recorder ;
Thread RecordThread;
Handler recordHandler;
private TextView timeText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timeText=(TextView)findViewById(R.id.textView1);
RecordButton=(Button)findViewById(R.id.btnRecord);
RecordButton.setText("Start Recording");
RecordButton.getBackground().setColorFilter(new LightingColorFilter(-16711936, 0));
recording=false;
RecordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (recording)
{
recording=false;
stopRecording();
RecordButton.setText("Start Recording");
RecordButton.getBackground().setColorFilter(new LightingColorFilter(-16711936, 0));
// Toast.makeText(getApplicationContext(), "Recording Stopped", Toast.LENGTH_LONG).show();
}//if(recording)
else if(!recording) {
recording=true;
startRecording();
RecordButton.setText("Stop Recording");
RecordButton.getBackground().setColorFilter(new LightingColorFilter(-65536, 0));
// Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
recordHandler = new Handler();
RecordThread=new Thread(new Runnable() {
int j;
@Override
public void run() {
// TODO Auto-generated method stub
for(j=30;j>=0;j--){
if(recording){
recordHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
setTimer(j);
}//handler run
});//post
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//catch
}else if (!recording)
{
stopRecording();
}
}//for
}//run
});
RecordThread.start();
}
}
});
}//onCreate
protected void startRecording() {
// TODO Auto-generated method stub
Random generator = new Random();
int n = 1000;
n = generator.nextInt(n);
File folder = new File(Environment.getExternalStorageDirectory().toString()+"/AudioRecord");
if(!folder.exists())
{
folder.mkdirs();
}
String path = Environment.getExternalStorageDirectory().getAbsolutePath() +
"/AudioRecord/audiorecord"+n+".3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(path);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Toast.makeText(getApplicationContext(),"Saving Audio as"+ path,
Toast.LENGTH_LONG).show();
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "IllegalStateException called", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "prepare() failed", Toast.LENGTH_LONG).show();
}
recorder.start();
}
private void stopRecording() {
recorder.stop();
recorder.release();
recorder = null;
}
private void setTimer(int j) {
// TODO Auto-generated method stub
((TextView)findViewById(R.id.textView1)).setText(String.valueOf(j) + "sec");
if(j==0){
recording=false;
}
}
}//class end
音频记录perfectly.I想这个问题是停止音频和thread.I不知道哪里的修正将被制成。 谢谢提前帮忙。
您可以张贴日志中的错误吗? – mach 2013-03-14 10:36:32
我在手机上遇到错误..我的应用程序停止不幸,当我点击停止按钮时... – 2013-03-14 16:46:28
如果您可以在问题发生时从电话中发布日志,这将非常有帮助。通过打开终端窗口并键入'adb logcat'来完成此操作。重现问题并复制粘贴窗口中的文本。 – mach 2013-03-18 06:23:35