调用MediaRecorder使AndroidStudio中的应用程序崩溃 [英] Calling MediaRecorder crashes app in AndroidStudio

查看:147
本文介绍了调用MediaRecorder使AndroidStudio中的应用程序崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建一个设置并开始录音的类,但是一旦我单击该按钮,应用就会崩溃. iv将问题隔离到我为MediRecorder设置参数的位置.

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.

更新的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返回0x3000,[1440x2560] -format:1 05-12 00:39:13.319 30086-30086/record66.record6 W/DisplayListCanvas:DisplayListCanvas在未绑定的RenderNode上启动(没有mOwningView) 05-12 00:39:13.319 30086-30158/record66.record6 D/libGLESv1:DTS_GLAPI:包:record66.record6不允许DTS 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)或= 1 05-12 00:39:13.389 30086-30086/record66.record6 I/时间轴:时间轴:Activity_idle id:android.os.BinderProxy@682466c时间: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/Android运行时:关闭VM 05-12 00:39:15.939 30086-30086/record66.record6 E/Android运行时:致命异常:主 处理:record66.record6,PID:30086 java.lang.RuntimeException:setAudioSource失败. 在android.media.MediaRecorder._setAudioSource(本机方法) 在android.media.MediaRecorder.setAudioSource(MediaRecorder.java:488) 在record66.record6.MainActivity.startRec(MainActivity.java:58) 在record66.record6.MainActivity.onClick(MainActivity.java:94) 在android.view.View.performClick(View.java:5697) 在android.widget.TextView.performClick(TextView.java:10815) 在android.view.View $ PerformClick.run(View.java:22526) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:158) 在android.app.ActivityThread.main(ActivityThread.java:7229) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 05-12 00:39:17.909 30086-30086/record66.record6 I/Process:正在发送信号. PID:30086 SIG:9

[ 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

推荐答案

请参阅让我们知道您遇到什么错误.因此可以提供帮助.

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

}
}

这篇关于调用MediaRecorder使AndroidStudio中的应用程序崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆