2012-12-18 56 views
2

我打算用此應用程序記錄呼叫。但是,當我將audioSource設置爲MediaRecorder.AudioSource.VOICE_CALL時,它會給出錯誤信息,但是當audioSource設置爲MediaRecorder.AudioSource.MIC時,它可以很好地工作。我不確定問題在哪裏。問題的logcat如下。任何形式的幫助非常感謝。謝謝。MediaRecorder啓動失敗-2147483648

public class IncomingCallReceiver extends BroadcastReceiver { 
private MediaRecorder mRecorder; 
@Override 
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)) 
     { 
     } 
     else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){ 
      Log.i("TelephonyManager", "Call picked up"); 
      mRecorder = new MediaRecorder(); 
      mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
      mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
      mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      mRecorder.setAudioEncodingBitRate(16); 
      mRecorder.setAudioSamplingRate(44100); 
      mRecorder.setOutputFile("/sdcard/Recording/callrecord.mp4"); 
      try{ 
       mRecorder.prepare(); 
      } 
      catch(IOException e){ 
      } 
      mRecorder.start(); 
      Log.i("StartRecordingCall", "Recording Call end"); 
     } 
     else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){ 
      Log.i("TelephonyManager", "Call hunged up"); 
      mRecorder.stop(); 
      mRecorder.release(); 
      mRecorder=null; 
     } 
} 

/

12-18 20:15:56.755: E/MediaRecorder(1577): start failed: -2147483648 
    12-18 20:15:56.755: D/AndroidRuntime(1577): Shutting down VM 
    12-18 20:15:56.755: W/dalvikvm(1577): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 
    12-18 20:15:56.765: E/AndroidRuntime(1577): FATAL EXCEPTION: main 
    12-18 20:15:56.765: E/AndroidRuntime(1577): java.lang.RuntimeException: start failed. 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.media.MediaRecorder.start(Native Method) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at com.example.callrecorder.MainActivity.startRecording(MainActivity.java:447) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at com.example.callrecorder.MainActivity.onClick(MainActivity.java:279) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.view.View.performClick(View.java:3534) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.view.View$PerformClick.run(View.java:14263) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.os.Handler.handleCallback(Handler.java:605) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.os.Handler.dispatchMessage(Handler.java:92) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.os.Looper.loop(Looper.java:137) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at android.app.ActivityThread.main(ActivityThread.java:4441) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at java.lang.reflect.Method.invokeNative(Native Method) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at java.lang.reflect.Method.invoke(Method.java:511) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    12-18 20:15:56.765: E/AndroidRuntime(1577):  at dalvik.system.NativeStart.main(Native Method) 

回答

3

這有可能是你在運行你的應用程序或者不支持語音通話錄音可言,或者說,它不喜歡的一個或多個設備您嘗試設置的參數。
例如,您可以嘗試使用8000 Hz採樣率而不是44100 Hz(無論如何,44100 Hz對AMR-NB毫無意義),並且完全消除對setAudioEncodingBitRate的呼叫。

您的代碼的另一個潛在問題是您的BroadcastReceiver對象中有MediaRecorder實例,並且尚未將其聲明爲靜態。以下是Android文檔有關BroadcastReceiver的說明:

BroadcastReceiver對象僅在調用onReceive(Context,Intent)期間有效。一旦你的代碼從這個函數返回,系統就認爲該對象已經完成並且不再處於活動狀態。

換句話說,你希望當您獲得一個包含EXTRA_STATE_IDLE可能會因爲你比創建該MediaRecorder的一個不同的BroadcastReceiver實例中居然存在了廣播在那裏的MediaRecorder實例。

+0

我試過用另一個設備,它是我的三星s3,它的工作原理,但是當我用我的xperia arc s嘗試時,它似乎沒有工作。你說得對,它實際上是設備特定的。 – Chewy

相關問題