1

我正在製作一個應用程序,允許用戶錄製音頻並將其保存在SD卡中的某個位置。我正在使用MediaRecorder來錄製音頻。Android MediaRecorder IllegalStateException

我重複使用了一些來自androiddevblog網站的代碼,因爲它是由另一位用戶在stackoverflow上推薦的,以檢查這些教程。

我的問題是每當我點擊按鈕記錄音頻時,我收到一個錯誤,說「你的應用程序已被迫停止」。我使用調試器來發現這是因爲我在recorder.stop()

上有一個illegalStateException異常我知道沒有任何東西會根據我的代碼得到記錄。我想首先確保文件被創建並保存。

我之前發佈了這個問題,解決了我原來的問題,但之後遇到了這個問題。所以它可能看起來是重複的。

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)停止錄音並再次做了手術,希望工程