zoukankan      html  css  js  c++  java
  • 如何创建黑名单

    黑名单的大致原理是监听来电,当有来电是检查它的号码,是否存在于黑名单中。如果它是黑名单中的号码,立即挂断电话。

    所以主要步骤是四步:一、监听有来电并获取它的号码;二、查看号码是否在黑名单中;三、挂断电话;四、启动监控。

    一、监听来电并获取它的号码

    1、引入接口文件

    文件名和包名必须与之相同。

    2、申请权限

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

    3、描述监控内容

    CustomPhoneCallListener cpListener;
        TelephonyManager telephonyManager;
        public class CustomPhoneCallListener extends PhoneStateListener{
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state){
                    case TelephonyManager.CALL_STATE_IDLE:
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        break;
                    case TelephonyManager.CALL_STATE_RINGING:
                        if(isBlock(incomingNumber)){
                            try{
                                Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
                                IBinder binder = (IBinder) method.invoke(null,new Object[]{TELEPHONY_SERVICE});
                                ITelephony telephony = ITelephony.Stub.asInterface(binder);
                                telephony.endCall();
                            } catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        }

    其中incomingNumber就是来电的号码。

    二、查看号码是否在黑名单中

        private boolean isBlock(String number) {
            for (int i = 0; i < black_phone.size(); i++) {
                if(black_phone.get(i).equals(number)){
                    return true;
                }
            }
            return false;
        }

    三、如果号码存在于黑名单中,挂断电话

                        if(isBlock(incomingNumber)){
                            try{
                                Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
                                IBinder binder = (IBinder) method.invoke(null,new Object[]{TELEPHONY_SERVICE});
                                ITelephony telephony = ITelephony.Stub.asInterface(binder);
                                telephony.endCall();
                            } catch (Exception e){
                                e.printStackTrace();
                            }
                        }

    四、启动监控

        CustomPhoneCallListener cpListener;
        TelephonyManager telephonyManager;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.black_number);
            telephonyManager= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            cpListener = new CustomPhoneCallListener();
            telephonyManager.listen(cpListener,PhoneStateListener.LISTEN_CALL_STATE);
        }
  • 相关阅读:
    用Python查找数组中出现奇数次的那个数字
    python之路--MySQL多表查询
    python之路--MySQl单表查询
    python之路--MySQL 库,表的详细操作
    python之路--MySQL数据库初识
    python之路--线程的其他方法
    python之路--关于线程的一些方法
    python之路--管道, 事件, 信号量, 进程池
    python之路--进程内容补充
    python之路--操作系统介绍,进程的创建
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4230373.html
Copyright © 2011-2022 走看看