проблема записи звука в андроиде - PullRequest
0 голосов
/ 12 мая 2011

Я создаю приложение для записи голоса для планшета. Я попробовал приведенный ниже код для записи звука. Но он падает, когда я нажимаю на кнопку Стоп. Plz, помогите мне ...

public class soundrecord extends Activity {
    private Button start;
    private Button stop;
    private TextView txt;
     MediaRecorder recorder;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start=(Button)findViewById(R.id.start);
        stop=(Button)findViewById(R.id.stop);
        txt=(TextView)findViewById(R.id.txtstatus);
        recorder = new MediaRecorder();  
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
        recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);  
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
        recorder.setOutputFile("/myfile/temp");  



        start.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                 try {
                     txt.setText("recording");
                     recorder.prepare();
                     recorder.start(); 
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }


            }
        })  ;       


        stop.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                txt.setText("stop recording");
                recorder.stop();
                /*recorder.reset();    
                recorder.release();*/

            }
        })  ;


    }
}

это исключение показано вlogcat

05-12 15: 49: 01.013: ОШИБКА / AndroidRuntime (677): java.lang.IllegalStateException

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Документация для остановки гласит:

IllegalStateException, если она вызывается до start ()

Теперь я предполагаю, что вы не звонитеэто перед началом.Что мне интересно, если ваш onCreate () происходит правильно.Если по какой-то причине onCreate () вызывается во второй раз (например, экран вращается), то будет создан новый MediaRecorder, и вы будете вызывать stop () на устройстве записи, которое еще не было вызвано.

Кроме того, вы уверены, что start () работает правильно?Возможно, IllegalStateException исходит из start ().Можете ли вы дать нам полную трассировку стека, чтобы сказать, откуда исходит IllegalStateException?


Продолжение с исключением, которое вы дали.Это, вероятно, потому что каталог аудиометра не существует.Если вы создадите это с помощью File.mkdir (), это должно работать.Или попробуйте запустить файл с именем верхнего уровня, как показано в примере по адресу: http://developer.android.com/guide/topics/media/index.html

recorder.setOutputFile("/audiorecordtest.3gp");
0 голосов
/ 12 мая 2011

перейдите по следующей ссылке.Это пример кода, который я нашел на developer.android.com. Может быть, он вам пригодится http://developer.android.com/guide/topics/media/index.html

...