Я сделал код, который позволяет записывать звук с микрофона. Странно то, что когда я нажмите на мою кнопку, похоже, что есть какой-то лаг, кнопка остается визуально нажатой в течение половины секунды, а затем запускает ее метод. есть ли причина для этого и как я могу это решить?Отложить на мои кнопки
То, что я имею сейчас:
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;
}
EDIT Спасибо за помощь, я решил работать с сервисом, но борюсь немного. Я создал:
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;
Имея вопрос об этом, как я теперь могу остановить эту службу (= остановить запись) (нажав Ф.Э. кнопку) и сообщить идею обратно активность? Я попытался добавить функцию остановки в службу, но она не работает, когда я вызываю service.stop(), чтобы остановить ее.
Спасибо, никогда не использовал это, но я быстро прочитаю его и попробую, вернусь, чтобы сообщить, разрешила ли я его! –
@MatthiasVanb В документе [document] (http://developer.android.com/reference/android/os/AsyncTask.html) говорится: * AsyncTasks идеально подходит для коротких операций (всего несколько секунд) * Я думаю, вам нужно ['Сервис'] (http://developer.android.com/reference/android/app/Service.html). – 2013-03-05 08:18:25
Мм, хорошо. Я новичок, так что теперь мне действительно трудно понять, какой из них лучше: D Но сама запись может быть, конечно, дольше нескольких секунд.это будет в большинстве случаев ... –