2011-07-27 8 views
8

私はこのコードを記録してコールを記録しました。 Android 2.1では正常に動作します。 Android 2.2では、0バイトの出力ファイルを作成します。Android 2.2でレコードコール

どうすれば解決できますか?

MediaRecorder _recorder = new MediaRecorder(); 


public void start() throws IOException { 
    try { 
     String state = android.os.Environment.getExternalStorageState(); 
     if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
      throw new IOException("SD Card is not mounted. It is " + state 
        + "."); 
     } 

     // make sure the directory we plan to store the recording in exists 
     File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
       + "/sam.wav").getParentFile(); 
     if (!directory.exists() && !directory.mkdirs()) { 
      throw new IOException("Path to file could not be created."); 
     } 


     _recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
     _recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     _recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() 
       + "/test.wav"); 
     _recorder.prepare(); 
     _recorder.start(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

答えて

6

使用このスニペット

_recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK 
| MediaRecorder.AudioSource.VOICE_UPLINK); 

代わりの

_recorder.setAudioSource(android.media.MediaRecorder.AudioSource.VOICE_CALL); 
+0

それが働いています。返信ありがとうございます。 –

+1

少なくともドキュメンテーションによると、VOICE_UPLINKは定数2を持ち、VOICE_DOWNLINKは定数3を持っているので、それらをORして3を返します。おそらく動作しますが、DOWNLINKしか記録しないようです。 –

2

電話の録音は、一部のAndroid搭載端末でのみ機能します。これは、2.1を実行している1台の電話では動作しますが、2.2を実行している別のモデルでは動作しません。 APIはすべてのアーキテクチャでコンパイルおよび実行されますが、一部のデバイスではこの機能がハードウェアで無効になっています。

詳細はHow can I record voice and record Call in Android?を参照してください。