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