2011-10-28 25 views
2

Record phone calls on android phone?の例に従い、BroadcastReceiverに録音して、MIC音声を録音しようとしました。着信と発信を呼び出します。 私の質問は:どのようにユーザーが電話を拾うときに状態を得ることができますです。それが鳴っているとき、それはまた "android.intent.action.PHONE_STATE"の行動に行くでしょう。電話着信時または発信時の録音音声

マイコード:アンドロイド2.1 SDKに基づいており、HTC EVO 4G(アンドロイド2.2)でテストしたAndroidManifest.xml

<receiver android:name=".PhoneCallReceiver" android:enabled="true"> 
    <intent-filter android:priority="1000"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

public class PhoneCallReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 
     if (action.equals("android.intent.action.PHONE_STATE") 
     { 
      // Phone call recording 
      try { 
       recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
       recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
       recorder.setOutputFile(<my output dir>); 
       recorder.prepare(); 
       recorder.start(); 
       recordStarted = true; 
       telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
       telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 
      } catch(Exception ex) { 

      } 
     } 
    } 
} 


private final PhoneStateListener phoneListener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     try { 
      switch (state) { 
       case TelephonyManager.CALL_STATE_RINGING: { 
        // 
        break; 
       } 
       case TelephonyManager.CALL_STATE_OFFHOOK: { 
        // 
        break; 
       } 
       case TelephonyManager.CALL_STATE_IDLE: { 
        if (recordStarted) { 
         recorder.stop(); 
         recordStarted = false; 
        } 
        break; 
       } 
       default: { } 
      } 
     } catch (Exception ex) { 
     } 
    } 
}; 

コード

答えて

0

することができますandroid.intent.action.PHONE_STATEアクションを使用する代わりにandroid.intent.action.ANSWERアクションを使用してください。通話に応答すると、音声を録音することができます。

+0

ありがとうございます。しかし、電話を受けて、intent.getAction()がandroid.intent.action.ANSWERになることはありませんが、常にandroid.intent.action.PHONE_STATEになると、TelephonyManager.CALL_STATE_OFFHOOK状態がトリガーされることがわかりました。 Btw、2.1 SDKで開発し、Android 2.2(HTC EVO 4G)でテストします –

1

あなたは(Androidのドキュメントによる)を使用両端から

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 

を声を録音したい場合は、私はこれを試していないが、希望はあなたのために働くだろうし、あなたの質問に答えるために、あなたはの機能getCallState()を見てきましたTelephonyManager

+0

Nexusの携帯電話を含むこれまでの携帯電話ではうまくいかなかったと思います。 – Timmmm

関連する問題