当前位置: 代码迷 >> Android >> Android回电监听
  详细解决方案

Android回电监听

热度:18   发布时间:2016-04-28 08:16:57.0
Android来电监听

本文实现来电自动接听,自动录音,自动回拨功能。

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);		}	}}

1楼yangwen123昨天 18:08
谢谢分享!
  相关解决方案