停止录制和上下文

时间:2011-09-29 17:22:23

标签: android

我的问题如下:当通话结束时,我收到一个错误。我认为与Context有关。我的问题就像在这种情况下Sound Recorder Widget doesnt stop recording请帮助我!

public class Call extends BroadcastReceiver
{       
    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))
        {               
            mFileName = "/sdcard/Record.3gp";           
            MediaRecorder mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            try {mRecorder.prepare();} 
            catch (IOException e){}
            mRecorder.start();
        }

        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE))
        {
            mRecorder.stop();
            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

1 个答案:

答案 0 :(得分:2)

呼叫结束时mRecordernull,因为永远不会初始化。您应该将mRecorder变量设为类变量,并在调用开始时对其进行初始化。

现在,您只是在通话开始时在MediaRecorder的范围内宣布新的if statement

所以它应该是这样的:

public class Call extends BroadcastReceiver{       
     private MediaRecorder mRecorder;
     public void onReceive(Context context, Intent intent){           
        //...
        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
            mRecorder = new MediaRecorder();
            mRecorder.start();
            //....
        }
        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){
           if(mRecorder!=null){
                mRecorder.stop();
                mRecorder.release();
                mRecorder = null;
           }
        }
    }
}