首页 > 代码库 > 来电信息的拦截以及判断
来电信息的拦截以及判断
如何拦截来电,并检测到某些特定号码时自动挂断电话?
使用反射的技术访问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>
来电信息的拦截以及判断
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。