【练习】拦截来电

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //监听来电。
        TelephonyManager manager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
        PhoneStateListener listener = new MyPhoneStateListener();
        manager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);//监听电话状态。
    }
    class MyPhoneStateListener extends PhoneStateListener{
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            Log.i("Main",incomingNumber+"");
            if("5556".equals(incomingNumber)){
                switch (state){//判断状态
                    case TelephonyManager.CALL_STATE_IDLE://0
                                //挂断
                        Log.i("Main",TelephonyManager.CALL_STATE_IDLE+"");
                            break;
                    case TelephonyManager.CALL_STATE_RINGING://1
                        //响铃状态。
                        Log.i("Main", TelephonyManager.CALL_STATE_RINGING + "");
                        try {
                            //forName:要反射的包名.类名。----
                            Class myclass =   Class.forName("android.os.ServiceManager");
                            //得到方法。
                            /*
                            1;参数:方法的名称
                            2:参数:方法参数的类型的字节码文件。
                             */
                            Method method = myclass.getMethod("getService", String.class);
                            //调用方法。
                            /*
                            1:表示是否用对象来调用这个方法。如果不用对象则用null,
                            2:表示实参
                             */
                           ITelephony binder = (ITelephony) method.invoke(null, Service.TELEPHONY_SERVICE);
                            binder.endCall();//挂断电话
                        } catch (ClassNotFoundException e) {
                            e.printStackTrace();
                        } catch (NoSuchMethodException e) {
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        } catch (RemoteException e) {
                            e.printStackTrace();
                        }
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK://2
                        //通话状态
                        Log.i("Main",TelephonyManager.CALL_STATE_OFFHOOK+"");
                        //
                        break;
                }
            }
        }
    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(this,MyService.class);
        startService(intent);
    }
}
时间: 2024-10-11 01:42:27

【练习】拦截来电的相关文章

高版本Android如何利用反射调用系统隐藏的远程服务拦截来电

要说拦截Android系统来电,就不得不说起在低版本的时候Android提供给开发者使用的一个方法:endCall(),但由于谷歌后来考虑到对于一部手机来说,最重要的功能就是打电话了,如果这个功能随随便便就被人屏蔽了,安全性太差,所以在高版本的Android将这个方法屏蔽了,不再在TelephoneManager中暴露这个方法. 那么我们下面的目标就是要想办法调用到这个方法,当然首先我们还是需要实现一个广播接收者,来接收电话状态改变的广播,这里使用在服务中动态注册广播接收者的方法来实现,主要好处

来电信息的拦截以及判断

如何拦截来电,并检测到某些特定号码时自动挂断电话?使用反射的技术访问android SDK的内部功能来挂断电话1.拦截来电的广播接收器类(InCallReceiver)的onReceive()方法 1 public void onReceive(final Context context,Intent intent){ 2 //得到电话管理服务,以便获得电话状态 3 TelephonyManager tm=(TelephonyManager)context.getSystemService(Se

android项目 之 来电管家(8) ----- 添加开机自启动监听服务

现在大多数的应用都会开机自启动,来电管家更是如此,添加了开机自启动监听服务后,开机后即使你没有打开来电管家应用程序,一样可以拦截来电信息. 开机自启动Activity或Service的方法: 主要步骤: 1.  要有开机要启动的service或activity(这里开机要启动的当然就是ListenService了) 2. 编写一个BroadcastReceiver用以捕获ACTION_BOOT_COMPLETED这条广播,并在捕获之后启动我们要启动的Activity或service. BootC

手机响一下,挂断问题

手机响一下,挂断问题,在网上查找资料很多都是关于电话诈骗的,也有部分认为是将来电加入了黑名单后,来电被拦截了.其实今天的我遇到手机问题不属于这两种常见情况. 事情是这样的: 打昨天起,我手机仅有我老婆的号码打不进来,其他人电话都打的进来.现象:只要她打电话到我手机上就响一下就断了,致使其我无法接到她的电话. 问题排查: 首先查看我手机设置,确认没有把她的号码加入过黑名单,也没将她的号码做过呼叫转接等.我尝试卸载过带有拦截程序的杀毒软件,不过问题依旧.但有一个奇怪现象,在安装杀毒软件情况下,我将杀

android面试(2)----组件

1.anroid:id的作用? android:id是作为控件的唯一标示符.可以使用与releativelayout中,也可以再Activity中通过findviewbyid来获得指定的控件. 2.android:padding 和android:layout_margin的区别. padding是内部,而margin是外部. padding 的部分设置background可以覆盖到,而margin无法覆盖. 3.Imagebutton & imageview Imagebutton exter

【青松资讯】2018年金融行业网络威胁报告

*本报告共计8938字,阅读完毕大约需要22分钟. ? 2018金融威胁新鲜事 众所周知,网络犯罪的两大主因是政治和金钱,因此金融界一直是全球网络罪犯的一大收入来源.虽然政府和各类组织一直在寻求保护金融服务的新方法,但网络罪犯也有各类技术手段应对.这推动在线金融服务和支付系统.大型银行和POS终端的使用方式发生了许多变化. 过去一年,随着新的渗透技术.攻击载体和地域的扩展,金融网络威胁格局发生了广泛变化.但最有趣的事情是,人们被攻击的方式发生了巨大变化.随着区块链和加密货币的流行,许多新的支付方

归属地拦截设置说明 - CC来电拦截

归属地拦截设置一共有四种情况 以来电规则以及保存020区号(广东省广州市)进行说明 1.黑名单模式: 匹配到地级市 关 这样只要是广东省的号码打过来都进行拦截.例:广东省深圳市来电将会拦截. 2.黑名单模式: 匹配到地级市 开 这样只要是 广州市 的号码打过来都进行拦截,其他不拦截.例:广东省深圳市来电不会拦截. 3.白单模式: 匹配到地级市 关 这样只要是广东省的号码打过来都不拦截.例:除广东省的来电都将会拦截. 4.白名单模式: 匹配到地级市 开 这样只要是 广州市 的号码打过来都不拦截,其

用代码实现来电拦截

如果要进行来电拦截,首先要定义权限,然后写一个接收来电去电的广播.由于不同机型的问题,动态注册还是静态注册有待商榷,我这里用的是静态注册,模拟器测试通过. 一.申请权限 <!-- 添加访问手机电话状态的权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 拨打电话权限 --> <uses-permission android:name

Android4.0的来电拦截源码

在网上看到的来电拦截源码,在这里跟大家分享一下.需要这方面功能的朋友可以自己下载源码研究一下. 下载地址:http://www.devstore.cn/code/info/700.html 运行截图: