2016-06-30 8 views
1

ボイスレコーダアプリケーションを作成したいが、[録画開始]ボタンをクリックするとクラッシュする。 android.media.MediaRecorder.start(ネイティブメソッド)でjava.lang.IllegalStateExceptionというエラーが発生しました。 Iveもログを添付しました。java.lang.IllegalStateException android.media.MediaRecorder.start(ネイティブメソッド)

package com.example.sahil.chuckit; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.app.Activity; 
import android.media.MediaPlayer; 
import android.media.MediaRecorder; 
import android.os.Environment; 
import java.io.File; 

public class MainActivity extends Activity { 

    private static Button submit; 
    private static Button submit2; 
    private static Button submit3; 
    private static Button submit4; 
    private MediaPlayer mediaPlayer; 
    private MediaRecorder recorder; 
    private String output_file; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     output_file = Environment.getExternalStorageState() + "/audiorecorder.3gpp"; 
     OnClickButtonListener();OnClickButtonListener1(); 
     OnClickButtonListener3();OnClickButtonListener4(); 
    } 
    public void OnClickButtonListener(){ 
     submit =(Button)findViewById(R.id.button); 
     submit.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 

         beginRecording(); 

        } 
        } 

     ); 

    } 
    public void OnClickButtonListener1(){ 
     submit2 =(Button)findViewById(R.id.button2); 
     submit2.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         stopRecording(); 
        } 
       } 
     ); 

    } 

    public void OnClickButtonListener3(){ 
     submit3 =(Button)findViewById(R.id.button3); 
     submit3.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         try { 
          playRecording(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
     ); 

    } 
    public void OnClickButtonListener4(){ 
     submit4 =(Button)findViewById(R.id.button4); 
     submit4.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         stopPlayback(); 
        } 
       } 
     ); 

    } 
    private void ditchMediaRecorder() { 
     if (recorder != null) 
      recorder.release(); 
    } 
    private void beginRecording() { 
     ditchMediaRecorder(); 
     File outFile=new File(output_file); 

     if (outFile.exists()) 
     { outFile.delete();} 

     recorder=new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(output_file); 
     recorder.start(); 
    } 
    private void stopRecording() { 
     if(recorder!=null) 
      recorder.stop(); 
    } 

    private void playRecording() throws Exception { 
     ditchMediaPlayer(); 
     mediaPlayer=new MediaPlayer(); 
     mediaPlayer.setDataSource(output_file); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } 

    private void ditchMediaPlayer() { 
     if(mediaPlayer!=null) 
     { 
      try{ 
       mediaPlayer.release(); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

    private void stopPlayback() { 
     if (mediaPlayer!=null) 
      mediaPlayer.stop(); 
    } 




} 

Logcat:

LOG:06-30 05:11:12.603 24621-24621/com.example.sahil.chuckit E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.sahil.chuckit, PID: 24621 java.lang.IllegalStateException 
    at android.media.MediaRecorder.start(Native Method) 
    at com.example.sahil.chuckit.MainActivity.beginRecording(MainActivity.java:111) 
    at com.example.sahil.chuckit.MainActivity.access$000(MainActivity.java:22) 
    at com.example.sahil.chuckit.MainActivity$1.onClick(MainActivity.java:46) 
    at android.view.View.performClick(View.java:5198) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
06-30 05:11:14.891 24621-24621/com.example.sahil.chuckit I/Process: Sending signal. PID: 24621 SIG: 9 

答えて

0

あなたはMediaRecorderだけでなく、MediaPlayerは、特定の順序で何らかのアクションを行うには、あなたを義務づける彼らのステートマシンを、持っていることを、考慮に入れる必要があります。

ここでは、MediaRecorderを準備して録音を開始しようとしました。あなたはbeginRecording機能にrecorder.prepare()recordeer.start()前に関数を呼び出すために忘れている

recorder.start(); 
+0

Youreの権利が、準備文を追加した後、私は、javaを言って、このエラーを取得します。 lang.RuntimeException:開始に失敗しました。 android.media.MediaRecorder.start(ネイティブメソッド)の は、私のrecorder.start()です。関数 –

+0

http://stackoverflow.com/a/27249573/6507689 –

1

recorder.prepare(); 

前に呼び出します。

機能がcompresionためのデジタルオーディオをアナログデータの変換のようなものがたくさん気をつけます準備し、どこのファイルなどを保存する

+0

しかし、私はrecorder.start()を指すこのステートメントを追加する準備をした後、関数java.lang.RuntimeException:開始に失敗しました。 android.media.MediaRecorder.start(ネイティブメソッド) –

+0

レコードオーディオと外部ストレージのようなマニフェストに必要な権限を追加しました もしそうなら、適切な例としてこのリンクを参照できます (http://stackoverflow.com/questions)/11005859/record-audio-via-mediarecorder) –

関連する問題