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);
        }
  • 相关阅读:
    ubuntu 12.04(Precise Pangolin)启用休眠(Hibernate)功能的方案
    svn小技巧——重定向svn diff
    引用对象深度复制
    引用对象深度复制的简单实现方法
    vue Excel导出 [post请求+提示语]
    随手笔记-二进制的正负计算
    枚举类的扩展使用
    关于担心java import xxx.*对资源占用的一次小实践
    idea 自动添加注释 (方法+类 带参数/返回值)
    maven打包到本地仓库
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4230373.html
Copyright © 2011-2022 走看看