首页 > 代码库 > 来电信息的拦截以及判断

来电信息的拦截以及判断

如何拦截来电,并检测到某些特定号码时自动挂断电话?
使用反射的技术访问android SDK的内部功能来挂断电话
1.拦截来电的广播接收器类(InCallReceiver)的onReceive()方法

 

 1 public void onReceive(final Context context,Intent intent){ 2  //得到电话管理服务,以便获得电话状态 3  TelephonyManager tm=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); 4  //根据不同的来电状态进行处理 5  switch(tm.getCallState()){ 6      //响铃 7   case TelephonyManager.CALL_STATE_RINGING: 8      //获得来电的电话号码 9   String incomingNumber=intent.getStringExtra("incoming_number");10    //假如来电号码时12345678.则挂断电话11    if("12345678".equals(incomingNumber)){12    Calss<TelephonyManager> telephonyManagerClass=TelephonyManager.class;13    //通过Java反射技术获得getITelephony方法对应的Method对象14  Method telephonyMethod=telephonyManagerClass.getDelaredMethod("getITelephony",(Class[]) null);15    //允许访问getITelephony方法16    telephonyMethod.setAccessible(true);17    //调用getITelephony方法获取ITelephony对象18    Object obj=telephonyMethod.invoke(telephonyManager.(Object[]) null);19    //获取endCall方法对应Method对象20    Method endCallMethod=obj.getClass().getMethod("endCall",null);21   //允许访问endCall方法22   endCallMethod.setAccessible(true);23   //调用endCall方法挂断电话24    endCallMethod.invoke(obj,null);25 26    }27    break;28    case TelephonyManager.CALL_STATE_OFFHOOK://接听电话29   Log.d("call_state","offhook");30   break;31   case TelephonyManager.CALL_STATE_IDLE://挂断电话32   closeToast();33   break;34  }35  }

2.最后需要在清单文件中定义广播接收器,并添加可接收来电广播的权限
配置inCallReceiver

1 <receiver android:name=".InCassReceiver"2 android:enable="treu">3  <intent-=filter>4  <action android:name="android.intent.action.PHONE_STATE"/>5  <intent-filter>6  </recevier>

 

来电信息的拦截以及判断