无法停止录制? [英] Can't stop recording?

查看:103
本文介绍了无法停止录制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

可能重复:结果
  停止录制和上下文


我不明白什么是错的?!
当手机铃声响起,然后开始记录。
但是,当通话结束,我得到NullPointerException异常,因为MediRecorder是空的,但录音仍在继续,直到我把一个错误的窗口。
我的问题与此相同的录音机的Widget犯规停止录制

 公共类调用扩展广播接收器
{
    私人MediaRecorder mRecorder;
    公共无效的onReceive(上下文的背景下,意图意图)
    {
        捆绑包= intent.getExtras();
        如果(空==束)回报;
        字符串状态= bundle.getString(TelephonyManager.EXTRA_STATE);        如果(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {
            mRecorder =新MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(/ SD卡/ Record.3gp);
            mRecorder.setAudioEn codeR(MediaRecorder.AudioEn coder.AMR_NB);
            尝试{mRecorder prepare();}
            赶上(IOException异常五){}
            mRecorder.start();            //如果我停在这里录制,那么一切都很好
            / *
               尝试
                    {视频下载(300000);}
               赶上(InterruptedException的E)
                    {e.printStackTrace();}
               mRecorder.stop();
               mRecorder.release();
               mRecorder = NULL;
            * /        }        如果(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE))
        {
            如果(mRecorder!= NULL)//但是,这始终为false。如果我删除这个条件 -
            {
                 mRecorder.stop(); // - 那么这里的NullPointerException
                 mRecorder.release();
                 mRecorder = NULL;
            }
        }
    }
}

LogCat中:

  7月10日至1日:13:28.054:ERROR / AndroidRuntime(553):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):了java.lang.RuntimeException:无法启动接收xxx.xxx.xxx.Call:显示java.lang.NullPointerException
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2646)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.app.ActivityThread.access $ 3100(ActivityThread.java:119)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1913)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.os.Handler.dispatchMessage(Handler.java:99)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.os.Looper.loop(Looper.java:123)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.app.ActivityThread.main(ActivityThread.java:4363)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在java.lang.reflect.Method.invokeNative(本机方法)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在java.lang.reflect.Method.invoke(Method.java:521)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在dalvik.system.NativeStart.main(本机方法)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):致:显示java.lang.NullPointerException
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在xxx.xxx.xxx.Call.onReceive(Call.java:49)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):在android.app.ActivityThread.handleReceiver(ActivityThread.java:2637)
七月10日至1日:13:29.134:ERROR / AndroidRuntime(553):10 ...更多
七月10日至1日:13:33.184:ERROR / audio_input(31):不支持的参数:X-PVMF /媒体输入节点/帽配置界面; valtype = key_specific_value
七月10日至1日:13:33.184:ERROR / audio_input(31):VerifyAndSetParameter失败


解决方案

问题是你实例化一个新的 MediaRecorder 里面的如果这是掩盖 MediaRecorder mRecorder 类成员声明。所以更改:

 如果(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {
            MediaRecorder mRecorder =新MediaRecorder();
        .....
        }

这样:

 如果(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {
           mRecorder =新MediaRecorder();
        .....
        }

Possible Duplicate:
Stop Recording and Context

I can't understand what's wrong ?!!! When the phone rings then recording starts. But when the call ends I get NullPointerException, because MediRecorder is null, but recording is still going until I shut the window with an error. My problem the same as this Sound Recorder Widget doesnt stop recording

public class Call extends BroadcastReceiver
{   
    private MediaRecorder mRecorder;    
    public void onReceive(Context context, Intent intent)
    {           
        Bundle bundle = intent.getExtras();
        if(null == bundle) return;
        String state = bundle.getString(TelephonyManager.EXTRA_STATE);

        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {          
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile("/sdcard/Record.3gp";);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            try {mRecorder.prepare();} 
            catch (IOException e){}
            mRecorder.start();

            // if I stop recording here, then everything is fine
            /* 
               try 
                    {Thread.sleep(300000);} 
               catch (InterruptedException e) 
                    {e.printStackTrace();}
               mRecorder.stop();
               mRecorder.release();
               mRecorder = null;    
            */

        }

        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE))
        {
            if(mRecorder != null)  // But this always false. if I remove this condition -
            {
                 mRecorder.stop(); // - then here NullPointerException
                 mRecorder.release();
                 mRecorder = null;
            }
        }
    }
}

LogCat:

10-01 07:13:28.054: ERROR/AndroidRuntime(553): Uncaught handler: thread main exiting due to uncaught exception
10-01 07:13:29.134: ERROR/AndroidRuntime(553): java.lang.RuntimeException: Unable to start receiver xxx.xxx.xxx.Call: java.lang.NullPointerException
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2646)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.app.ActivityThread.access$3100(ActivityThread.java:119)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.os.Looper.loop(Looper.java:123)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.app.ActivityThread.main(ActivityThread.java:4363)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at java.lang.reflect.Method.invokeNative(Native Method)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at java.lang.reflect.Method.invoke(Method.java:521)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at dalvik.system.NativeStart.main(Native Method)
10-01 07:13:29.134: ERROR/AndroidRuntime(553): Caused by: java.lang.NullPointerException
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at xxx.xxx.xxx.Call.onReceive(Call.java:49)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2637)
10-01 07:13:29.134: ERROR/AndroidRuntime(553):     ... 10 more
10-01 07:13:33.184: ERROR/audio_input(31): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
10-01 07:13:33.184: ERROR/audio_input(31): VerifyAndSetParameter failed

解决方案

The problem is you are instantiating a new MediaRecorder inside your if statement which is masking the MediaRecorder mRecorder class member. So Change:

  if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {          
            MediaRecorder mRecorder = new MediaRecorder();
        .....
        }          

to this:

  if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {          
           mRecorder = new MediaRecorder();
        .....
        }    

这篇关于无法停止录制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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