2016-05-10 8 views
4

Ich versuche, eine Klasse zu erstellen, die Audioaufzeichnung setzt und startet, aber sobald ich auf die Schaltfläche klicke, stürzt die App ab. Iv isoliert das Problem, wo ich die Parameter für den MediRecorder einstelle.Aufruf von MediaRecorder stürzt App in AndroidStudio

private void startRec() throws IOException { 
    if (mrecorder!=null) 
     mrecorder.release(); 

    mrecorder= new MediaRecorder(); 

-> mrecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    /* 
    mrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    mrecorder.setOutputFile(MFILE); 

    mrecorder.prepare(); 
    mrecorder.start(); 

    */ 
} 

Es stürzt ab, wenn die Zeile mit dem Pfeil über dem Anfang der Notizen ausgeführt wird. Ich fügte dem Manifest auch die folgende Erlaubnis hinzu:

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

Irgendwelche Hilfe sehr geschätzt.

UPDATED Logcat

[05-12 00: 39: 13,299 30086: 30158 D /] ro.exynos.dss isEnabled: 0 05-12 00: 39: 30.086 bis 30.158 13,309/record66.record6 D/mali_winsys: new_window_surface liefert 0x3000, [1440x2560] -Format: 1 05-12 00: 39: 13.319 30086-30086/record66.record6 W/DisplayListCanvas: DisplayListCanvas wird auf nicht gebundenem RenderNode (ohne mOwningView) 05-12 00 gestartet 39:: 13,319 30.086-30.158/record66.record6 D/libGLESv1: DTS_GLAPI: DTS ist nicht für das Paket erlaubt: record66.record6 05-12 00: 39: 30.086 bis 30.086 13,359/record66.record6 D/ViewRootImpl: MSG_RESIZED_REPORT: ci = Rect (0, 96 - 0, 0) vi = Rect (0, 96 bis 0, 0) = 1 oder 05-12 00: 39: 13.389 30.086 bis 30.086/record66.record6 I/Timeline: Zeitplan: Activity_idle ID: [email protected]c Zeit: 234.401.322 05- 12 00: 39: 15.749 30086-30086/record66.record6 D/ViewRootImpl: ViewPostImeInputStage processPointer 0 05-12 00: 39: 15.879 30086-30086/record66.record6 D/ViewRootImpl: ViewPostImeInputStage processPointer 1 05-12 00:39 : 15.929 30086-30086/record66.record6 D/AndroidRuntime: Herunterfahren VM 05-12 00: 39: 15.939 30086-30086/record66.record6 E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: record66.record6, PID: 30086 java.lang.RuntimeException: setAudioSource ist fehlgeschlagen. bei android.media.MediaRecorder._setAudioSource (native Methode) bei android.media.MediaRecorder.setAudioSource (MediaRecorder.java:488) bei record66.record6.MainActivity.startRec (MainActivity.java:58) bei record66.record6 .MainActivity.onClick (MainActivity.java:94) bei android.view.View.performClick (View.java:5697) bei android.widget.TextView.performClick (TextView.java:10815) bei android.view.View $ PerformClick.run (View.java:22526) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:158) bei android.app.ActivityThread.main (ActivityThread.java:7229) bei java.lang.reflect.Method.invoke (native Methode) bei com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1230) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120) 05-12 00: 39: 17.909 30086- 30086/record66.record6 I/Prozess: Sendersignal. PID: 30086 SIG: 9

+0

siehe http://stackoverflow.com/questions/10340400/mediarecorder-crashes-on-start –

+0

was das Crash-Protokoll? – F43nd1r

+0

Was Logcat sagt, post, damit wir helfen können. – Dhrupal

Antwort

1

Bitte sehen, was logcat ist.

Und lassen Sie uns wissen, welche Fehler Sie bekommen. So kann helfen.


package com.example.dhrupalpatel.test; 
import android.app.Activity; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.os.Environment; 
import java.io.File; 
import java.io.IOException; 

public class MainActivity extends Activity implements View.OnClickListener{ 
MediaRecorder mrecorder; 
boolean mStartRecording=false; 

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

    start =(Button)findViewById(R.id.start); 
    stop =(Button)findViewById(R.id.stop); 
    start.setOnClickListener(this); 
    stop.setOnClickListener(this); 

} 

private void startRec() throws IOException { 
    boolean mExternalStorageAvailable = false; 
    boolean mExternalStorageWriteable = false; 
    String state = Environment.getExternalStorageState(); 

    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     // We can read and write the media 
     mExternalStorageAvailable = mExternalStorageWriteable = true; 
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     // We can only read the media 
     mExternalStorageAvailable = true; 
     mExternalStorageWriteable = false; 
    } else { 
     // Something else is wrong. It may be one of many other states, but all we need 
     // to know is we can neither read nor write 
     mExternalStorageAvailable = mExternalStorageWriteable = false; 
    } 
    File sdCardDirectory= Environment 
      .getExternalStorageDirectory(); 
    if(mExternalStorageAvailable && !sdCardDirectory.exists()) 
    { 
     sdCardDirectory.mkdir(); 
    } 
    File f= new File(sdCardDirectory.getPath()+"/"+System.currentTimeMillis()+".mp3"); 
    if(mrecorder == null) { 
     mrecorder = new MediaRecorder(); 
     mrecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 

     mrecorder.setOutputFile(f.getPath()); 
     mrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    } 
    if(!mStartRecording) { 

     try { 
      mrecorder.prepare(); 
      mrecorder.start(); 
      mStartRecording = true; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private void stopRec() throws IOException { 

    if(mStartRecording) { 
     mStartRecording = false; 
     mrecorder.stop(); 
     mrecorder.reset(); 
     mrecorder.release(); 
     mrecorder = null; 
    } 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) 
    { 
     case R.id.start: 
      try { 
       startRec(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      break; 
     case R.id.stop: 
      try { 
       stopRec(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      break; 
    } 

} 
} 
+0

Ok ich denke ich habe es verstanden. Edited original post lassen Sie mich wissen, wenn das ist es –

+0

Ich habe Code bearbeitet, bitte versuchen Sie es mit diesem Code – Dhrupal

+0

Vielen Dank, ich werde es versuchen. Was ich habe den Grund, dass mein Code nicht funktioniert hat? Liegt es daran, dass ich den On-Click-Listener nie implementiert habe? –