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);
        }
  • 相关阅读:
    如何阅读论文
    我的算法学习之路
    blazor wasm访问非本地的restful service
    ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码
    在ef core中使用postgres数据库的全文检索功能实战之中文支持
    在ef core中使用postgres数据库的全文检索功能实战
    .net core grpc单元测试
    asp.net core + entity framework core 多数据库类型支持实战
    asp.net core计划任务探索之hangfire+redis+cluster
    Keycloak & Asp.net core webapi 整合跳坑之旅
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4230373.html
Copyright © 2011-2022 走看看