2013-03-19 161 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