zoukankan      html  css  js  c++  java
  • 如何拦截来电,并检测到某些特定号码时自动挂断电话

    如何拦截来电,并检测到某些特定号码时自动挂断电话?写出关键代码。

      拦截来电只需要编写一个广播接收类即可,但用代码挂断电话从Android SDK 1.5开始就将这个功能隐藏了,因此无法通过常规的方法挂断电话。不过可以通过反射技术访问Android SDK的内部功能来挂断电话。

      拦截来电的广播接收类(InCallReceiver)的onReceiver方法的代码如下:

      

    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))
        {
            Class<TelephonyManager> telephonyManagerClass=TelephonyManager.class;
        //通过Java反射技术获取getITelephony方法对应的Method对象
        Method telephonyMethod=telephonyManagerClass.getDeclaredMethod("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();
        }
    }

      还需要在AndroidManifest.xml文件中设置定义广播接收器,并赋予接收来电广播的权限。

      配置InCallReceiver的代码如下:

    <receiver android:name=".InCallReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"/>
        </intent-filter>
    </receiver>

      监听来电状态需要使用下面的代码设置权限

     

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

      

  • 相关阅读:
    用指针写线段树(维护乘法)
    费用流——网络流板子
    最小割板子题——[USACO5.4]奶牛的电信
    数论——置换
    NOIP2012 借教室
    POJ1990 moofest
    POJ2352 star
    POJ2299 Ultra-QuickSort
    CF498D Traffic Jams in the land
    POJ2828 Buy Ticket
  • 原文地址:https://www.cnblogs.com/dazuihou/p/3587316.html
Copyright © 2011-2022 走看看