大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Android技巧 > 来电信息的拦截以及判断

来电信息的拦截以及判断

关键词:拦截来电判断信息  阅读(607) 赞(13)

[摘要]本文是对来电信息的拦截以及判断的讲解,对学习Android编程技术有所帮助,与大家分享。

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

 public void onReceive(final Context context,Intent intent){
  //得到电话管理服务,以便获得电话状态
  TelephonyManager tm=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
  //根据不同的来电状态进行处理
  switch(tm.getCallState()){
      //响铃
   case TelephonyManager.CALL_STATE_RINGING:
      //获得来电的电话号码
   String incomingNumber=intent.getStringExtra("incoming_number");
    //假如来电号码时12345678.则挂断电话
    if("12345678".equals(incomingNumber)){
    Calss<TelephonyManager> telephonyManagerClass=TelephonyManager.class;
    //通过Java反射技术获得getITelephony方法对应的Method对象
  Method telephonyMethod=telephonyManagerClass.getDelaredMethod("getITelephony",(Class[]) null);
    //允许访问getITelephony方法
    telephonyMethod.setAccessible(true);
    //调用getITelephony方法获取ITelephony对象
    Object obj=telephonyMethod.invoke(telephonyManager.(Object[]) null);
    //获取endCall方法对应Method对象
    Method endCallMethod=obj.getClass().getMethod("endCall",null);
   //允许访问endCall方法
   endCallMethod.setAccessible(true);
   //调用endCall方法挂断电话
    endCallMethod.invoke(obj,null);
 
    }
    break;
    case TelephonyManager.CALL_STATE_OFFHOOK://接听电话
   Log.d("call_state","offhook");
   break;
   case TelephonyManager.CALL_STATE_IDLE://挂断电话
   closeToast();
   break;
  }
  }

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

 <receiver android:name=".InCassReceiver"
 android:enable="treu">
  <intent-=filter>
  <action android:name="android.intent.action.PHONE_STATE"/>
  <intent-filter>
  </recevier>


相关评论