Calling MediaRecorder crashes app in AndroidStudio

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

I am trying to create a class that sets and starts audio recording but as soon as I click the button the app crashes. Iv isolated the problem to where I set the parameters for the MediRecorder.

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();      */ } 

It crashes when the line with the arrow above the start of the notes is executed. I added the following permission to the manifest as well:

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

Any help much appreciated.

UPDATED LOGCAT

[ 05-12 00:39:13.299 30086:30158 D/ ] ro.exynos.dss isEnabled: 0 05-12 00:39:13.309 30086-30158/record66.record6 D/mali_winsys: new_window_surface returns 0x3000, [1440x2560]-format:1 05-12 00:39:13.319 30086-30086/record66.record6 W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView) 05-12 00:39:13.319 30086-30158/record66.record6 D/libGLESv1: DTS_GLAPI : DTS is not allowed for Package : record66.record6 05-12 00:39:13.359 30086-30086/record66.record6 D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1 05-12 00:39:13.389 30086-30086/record66.record6 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@682466c time:234401322 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: Shutting down VM 05-12 00:39:15.939 30086-30086/record66.record6 E/AndroidRuntime: FATAL EXCEPTION: main Process: record66.record6, PID: 30086 java.lang.RuntimeException: setAudioSource failed. at android.media.MediaRecorder._setAudioSource(Native Method) at android.media.MediaRecorder.setAudioSource(MediaRecorder.java:488) at record66.record6.MainActivity.startRec(MainActivity.java:58) at record66.record6.MainActivity.onClick(MainActivity.java:94) at android.view.View.performClick(View.java:5697) at android.widget.TextView.performClick(TextView.java:10815) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 05-12 00:39:17.909 30086-30086/record66.record6 I/Process: Sending signal. PID: 30086 SIG: 9

回答1:

Please see what logcat is.

And let us know what error you are getting. So can help.


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;     }  } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!