问题描述:当应用中需要对来电这一状态进行处理时(例如来电时显示来电话号码归属地等),就需要对电话状态进行监听。
解决步骤:1.对电话状态的监听最好是放在服务中,因为有一种服务的启动方式可以不依赖于activity的生命周期,即使activity被销毁,服务依然在后台运行。因此创建一个Myservice extends Service;
2.创建一个类MyPhoneStateListener extends PhoneStateListener,手动重写电话改变会触发的方法,代码如下:
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
//空闲状态
//实现自己的业务逻辑
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
//摘机状态,至少有个电话活动,该活动或是拨打或是通话
break;case TelephonyManager.CALL_STATE_RINGING://响铃状态//实现自己的业务逻辑
break;default:break;}super.onCallStateChanged(state, incomingNumber);}//实现自己的业务逻辑
3.重写Service中的onCreate()方法和onDestroy()方法,代码如下:
@Override public void onCreate() { // 1.获取电话管理者对象 mTM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); mMyPhoneStateListener = new MyPhoneStateListener(); mTM.listen(mMyPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); }
当服务销毁的时候,取消电话状态的监听。
@Override public void onDestroy() { // 取消电话状态的监听 if (mTM != null && mMyPhoneStateListener != null) { mTM.listen(mMyPhoneStateListener, PhoneStateListener.LISTEN_NONE); } super.onDestroy(); }
这样,一旦服务被开启,就会一直监听来电的状态。