2011-09-29 39 views
2

我的問題是:當通話結束時出現錯誤。我認爲這與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 

回答

2

mRecordernull當通話結束,因爲,永遠不會初始化。您應該使mRecorder變量爲類變量,並在調用開始時將其初始化。

現在,您只需在呼叫開始時在if statement的範圍內聲明新的MediaRecorder

因此,它應該是這樣的:

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

謝謝您的回答,但我的問題沒有得到解決。我按照你寫給我的方式做了,但錄音從不停止,因爲如果(mRecorder!= null)從未不滿足。如果我刪除條件(mRecorder!= null),那麼我又會得到錯誤。 – user881902

+0

我解決了這個問題! – user881902