Как автоматически ограничить продолжительность записи звука Android? - PullRequest
5 голосов
/ 17 февраля 2012

У меня есть этот рабочий код.Мне нужно, чтобы записывать только в течение ограниченного времени без каких-либо кликов со стороны пользователя.Как мне это сделать?

    MediaRecorder recorder = new MediaRecorder();
File outputFile = new File(file);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
try {
    recorder.prepare();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
recorder.start();
recorder.setMaxDuration(60000);
// stop
recorder.stop();
recorder.reset(); 
recorder.release();

Ответы [ 4 ]

4 голосов
/ 07 сентября 2013

это будет сделано хорошо: (используйте функцию setMaxDuration перед подготовкой / запуском функции)

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());

recorder.setMaxDuration(60000);
recorder.prepare();
recorder.start();
2 голосов
/ 16 мая 2017

Используйте setMaxDuration и setOnInfoListener, чтобы получить обратный вызов для уведомления пользовательского интерфейса.

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());

recorder.setMaxDuration(60000);
recorder.prepare();
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
    @Override
    public void onInfo(MediaRecorder mr, int what, int extra) {
        if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
            Toast.makeText(context, "Recording stops. Limit reached", Toast.LENGTH_LONG).show();
        }
    }
});
recorder.start();
1 голос
/ 17 февраля 2012

Это может быть немного неприятный подход.Но это то, что я сделал,

, как только вы запустите ваш медиаплеер с mediaplayer.start (), запустите поток, параллельный этому, вот так:

 thread passMusic=new Thread(new Runnable() {

        public void run() {
            try {

                Thread.sleep(60000);
                mediaplayer.pause();
                mediaplayer.stop();
                mediaplayer.release();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
    });passMusic.start();

И теперь вы можете использовать обработчики дляобновить свой интерфейс или что-то.

0 голосов
/ 17 февраля 2012

Вы должны поместить вызовы Recorder.stop () и т. Д. В таймерпросто добавьте это после того, как вы вызвали Recorder.start ()

...