本文实现来电自动接听,自动录音,自动回拨功能。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); TelephonyManager mTelephonyManager =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); mTelephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE); ITelephony mTelephony = ITelephony.Stub.asInterface(ServiceManager.getService("phone")); } class PhoneListener extends PhoneStateListener { private MediaRecorder mRecorder = null; private boolean flag = false; private String phoneNum = null; @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub switch (state) { case TelephonyManager.CALL_STATE_IDLE: try { if (mRecorder != null) { mRecorder.stop(); // 停止 mRecorder.release();// 释放 mRecorder = null;// 垃圾回收 } if (flag) { mTelephony.call(phoneNum); flag = false; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_OFFHOOK: //通话录音 try { mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 此处只实现了录本地MIC输入的声音,若想录入对立通话者的声音 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile("/mnt/sdcard/" + incomingNumber + "_"+ System.currentTimeMillis() + ".3gp"); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (Exception e) { e.printStackTrace(); } mRecorder.start(); Thread.sleep(30 * 1000); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_RINGING: //来电自动接听 try { phoneNum = incomingNumber; flag = true; if (mTelephony.isRinging()) { mTelephony.silenceRinger(); mTelephony.answerRingingCall(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: break; } super.onCallStateChanged(state, incomingNumber); } } }