2013-03-19 160 views
0

我試圖實現一個學習音頻錄製,但我遇到異常導致應用程序崩潰沒有明確的線索如何可以解決這個問題。這裏是我的代碼Android音頻錄製錯誤

private static final File SDCARD_ROOT = Environment.getExternalStorageDirectory(); 
private static final String APP_DIR = "test_audio"; 
private static final String AUDIO_SAMPLE_NAME = "myShake"; 
............... 
............... 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    appDir = new File(SDCARD_ROOT, APP_DIR); 
    if (!appDir.exists()) { 
     appDir.mkdir(); 
    } 

    recordButton = (Button) findViewById(R.id.audio_button); 
    textView = (TextView) findViewById(R.id.edit_text); 
    recordButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(final View view, final MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       record(); 
       return true; 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 

       return true; 
      } else { 
       return false; 
      } 

     } 
    }); 

} 

private void record() { 
    final File audioSampleFile = new File(appDir, AUDIO_SAMPLE_NAME); 
    if (audioSampleFile.exists()) { 
     audioSampleFile.delete(); 
    } 

    if (mediaRecorder == null) { 
     mediaRecorder = new MediaRecorder(); 
    } 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    mediaRecorder.setOutputFile(audioSampleFile.getPath()); 
    mediaRecorder.start(); 
} 

以下是例外,我得到應用後,在電話墜毀

03-20 07:08:59.272: ERROR/NotificationService(243): Ignoring notification with icon==0: Notification(contentView=null vibrate=null,sound=nullnull,defaults=0x0,flags=0x62) 
03-20 07:09:04.007: ERROR/MediaRecorder(7156): start called in an invalid state: 4 
03-20 07:09:04.017: ERROR/AndroidRuntime(7156): FATAL EXCEPTION: main 
     java.lang.IllegalStateException 
     at android.media.MediaRecorder._start(Native Method) 
     at android.media.MediaRecorder.start(MediaRecorder.java:712) 
     at com.cs.gang.TestAudio.record(TestAudio.java:78) 

其中TestAudio.java:78是

mediaRecorder.start(); 

我搜索了這行問題在其他職位,但他們似乎並不完全相同。 我有權

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

,我相信我已經正確地創建文件訪問SD卡以及有啥可這個問題或錯誤的原因是什麼?感謝

回答

1

你需要調用start()

+0

這是正確的,對不起,這個愚蠢的問題之前調用mediaRecorder.prepare()。我是android新手。非常感謝你 – Korben 2013-03-19 23:47:27