电话监听

2019-04-14 15:47发布

一、来电监听

1、成员变量: private PhoneStateListener listener; private TelephonyManager tm; 2、注册电话状态监听代码: // 注册电话监听 // 通过电话管理类TelephoneManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); // 监听电话的状态 listener = new PhoneStateListener() { /* * (non-Javadoc) 该方法用来监听电话的状态 * * @see android.telephony.PhoneStateListener#onCallStateChanged(int, * java.lang.String) */ @Override public void onCallStateChanged(int state, final String incomingNumber) { // TODO Auto-generated method stub // state 电话的状态 incomingNumber 打进来的号码 switch (state) { case TelephonyManager.CALL_STATE_IDLE:// 挂断的状态,空闲的状态 System.out.println("CALL_STATE_IDLE"); break; case TelephonyManager.CALL_STATE_RINGING://响铃状态 System.out.println("CALL_STATE_RINGING"); break; case TelephonyManager.CALL_STATE_OFFHOOK:// 通话的状态 System.out.println("CALL_STATE_OFFHOOK"); break; default: break; } super.onCallStateChanged(state, incomingNumber); } } // 注册电话的监听 tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 3、取消电话状态监听代码: @Override public void onDestroy() { // 取消电话状态监听 tm.listen(listener, PhoneStateListener.LISTEN_NONE); }

二、外拨监听

TelephonyManager只能监听”来电响铃”、”空闲”、及”接通电话”状态,不能监听外拨状态,需要使用广播接收者才能监听外拨。
注意:TelephonyManager不管是来电还是外拨,”接通电话”状态都会被回调。 1、外拨电话的广播的实现 /** * @author Administrator * 外拨电话的广播 */ private class OutCallReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { isOutCall = true;//记录是外拨电话 //获取外拨的电话号码 String phoneNumber = getResultData(); showLocationToast(phoneNumber);//显示外拨电话的土司 } } 2、注册外拨广播接收者 private OutCallReceiver outCallReceiver; @Override public void onCreate() { //监控外拨 注册广播 outCallReceiver = new OutCallReceiver(); IntentFilter filter = new IntentFilter("android.intent.action.NEW_OUTGOING_CALL"); //注册外拨电话广播 registerReceiver(outCallReceiver, filter); } 3、取消外拨广播接收者 @Override public void onDestroy() { //监控外拨 取消注册广播 unregisterReceiver(outCallReceiver); super.onDestroy(); } 4、清单文件中添加权限 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />