1

Я делаю приложение, которое позволяет пользователю записывать аудио и сохранять его где-то на SD-карте. Я использую MediaRecorder для записи звука.Android MediaRecorder IllegalStateException

Я повторно использую код с сайта androiddevblog, как это было рекомендовано другим пользователем в stackoverflow, чтобы проверить эти учебные пособия.

Моя проблема - каждый раз, когда я нажимаю кнопку для записи звука, я получаю сообщение об ошибке «Ваше приложение было принудительно остановлено». Я использовал отладчик, чтобы узнать, что это связано с тем, что у меня есть незаконноеStateException на recorder.stop()

Я знаю, что ничто не будет записано на основе моего кода. Сначала я хочу убедиться, что файл создан и сохранен.

Я разместил этот вопрос раньше и решил свою первоначальную проблему, но столкнулся с этим после. Таким образом, это может показаться дубликатом.

public class MyRecorderActivity extends Activity{ 

private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder"; 
private static final String AUDIO_RECORDER_FILE_EXT_3GP = ".3gp"  
private Button audio; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.questionandanswer); 
.... 
.... 

audio = (Button) findViewById(R.id.audio_recordactivity); 
    audio.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

     startRecording(); 


     } 
    }); 

} 

    private String getFilename(){ 
     String filepath = Environment.getExternalStorageDirectory().getPath(); 
     File file = new File(filepath,AUDIO_RECORDER_FOLDER); 

     if(!file.exists()){ 
       file.mkdirs(); 
     } 

     return (file.getAbsolutePath()+ "/ " + System.currentTimeMillis() + AUDIO_RECORDER_FILE_EXT_3GP); 

    } 

private void startRecording(){ 
     MediaRecorder recorder = new MediaRecorder(); 

     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(getFilename()); 

     try { 
       recorder.prepare(); 
       recorder.start(); 
     } catch (IllegalStateException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 

     recorder.stop(); 
     recorder.reset(); 
     recorder.release(); 
    } 

} 

ответ

0

Обязательно укажите следующие разрешения.

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
+0

я добавил все необходимые разрешения – AndroidDev93

0

Может быть другая запись активна (Может быть записаны по умолчанию или recorderr другого загруженного приложения) остановить эту запись и сделать операцию еще раз, надеюсь, что он работает

Смежные вопросы