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);
        }
  • 相关阅读:
    C# 基础知识系列- 11 委托和事件
    C# 基础知识系列- 10 反射和泛型(二)
    C# 基础知识系列- 9 字符串的更多用法(二)
    C# 基础知识系列- 9 字符串的更多用法(一)
    C# 基础知识系列- 8 Linq最后一部分查询表达式语法实践
    C# 基础知识系列- 6 Lambda表达式和Linq简单介绍
    C# 基础知识系列- 5 反射和泛型
    C# 基础知识系列- 4 面向对象
    TLS加密远程连接Docker
    树莓派4B安装64位Linux(不用显示器键盘鼠标)
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4230373.html
Copyright © 2011-2022 走看看