我做了一個代碼,讓我記錄來自麥克風的音頻。奇怪的是,當它似乎有某種滯後我單擊我的按鈕,該按鈕保持視覺上按下半秒鐘,然後啓動它的方法。有沒有這個原因,我怎麼解決這個問題?滯後於我的按鈕
什麼我有現在:
private void onRecord(boolean start) {
if (start) {
startRecording();
} else {
stopRecording();
}
}
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bRecord:
if (mStartRecording) {
mRecordButton.setText("Stop Recording");
onRecord(true);
mStartRecording = false;
} else {
mRecordButton.setText("Start Recording");
mStartRecording = true;
onRecord(false);
}
break;
}
編輯 感謝您的幫助,我決定與服務工作,但我在努力一點點。我創建:
public class RecordService extends IntentService {
private MediaRecorder mRecorder = null;
private String mFileName;
private static final String LOG_TAG = "RecordService";
public RecordService() {
super("RecordService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
}
和
case R.id.bRecord:
if (mStartRecording) {
mRecordButton.setText("Stop Recording");
//onRecord(true);
Intent service = new Intent(myContext, RecordService.class);
myContext.startService(service);
mStartRecording = false;
} else {
mRecordButton.setText("Start Recording");
mStartRecording = true;
onRecord(false);
}
break;
有一個關於這個問題,我怎麼能現在停止此服務(=停止錄音)(再次點擊FE的按鈕),交流思想回活動?我試圖在服務中添加停止功能,但它似乎並不當我打電話service.stop()停止它的工作..
謝謝,從來沒有使用過這一點,但我會很快閱讀和嘗試,會盡快讓你知道,如果我解決它! – 2013-03-05 08:15:59
@MatthiasVanb作爲[文件](http://developer.android.com/reference/android/os/AsyncTask.html)說:(最多幾秒鐘)* AsyncTasks應該理想地用於短操作*我認爲你需要['Service'](http://developer.android.com/reference/android/app/Service.html)。 – 2013-03-05 08:18:25
嗯,好的。我是初學者,所以現在我很難知道哪一個最好:D但是錄音本身當然可以超過幾秒鐘..這將是大部分時間... – 2013-03-05 08:26:26