博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开机自启动电话拦截
阅读量:7002 次
发布时间:2019-06-27

本文共 2848 字,大约阅读时间需要 9 分钟。

 

public class BootReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        //启动电话监听的service        context.startService(new Intent(context, ListenCallService.class));    }}
public class ListenCallService extends Service {    private TelephonyManager tm;    private PhoneStateListener listener = new PhoneStateListener() {        // 当通话状态发生改变时调用        /**         * Callback invoked when device call state changes.         *         * @see TelephonyManager#CALL_STATE_IDLE         * @see TelephonyManager#CALL_STATE_RINGING         * @see TelephonyManager#CALL_STATE_OFFHOOK         */        public void onCallStateChanged(int state, String incomingNumber) {            switch (state) {            case TelephonyManager.CALL_STATE_IDLE:// 空闲 (挂断电话/未来电之前)                Log.e("TAG", "空闲 (挂断电话/未来电之前)");                break;            case TelephonyManager.CALL_STATE_RINGING:// 响铃                Log.e("TAG", "响铃");                // 如果来电电话是黑名单号(110), 就挂断电话                if ("110".equals(incomingNumber)) {                    try {                        endCall();                    } catch (Exception e) {                        e.printStackTrace();                    }                }                break;            case TelephonyManager.CALL_STATE_OFFHOOK:// 接通                Log.e("TAG", "接通");                break;            default:                break;            }        }    };    @Override    public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        return null;    }    /**     * 挂断电话     * @throws Exception      */    private void endCall() throws Exception {        // 通过反射调用隐藏的API        // 得到隐藏类的Class对象        Class c = Class.forName("android.os.ServiceManager");        // 得到方法所对应的Method对象        Method method = c.getMethod("getService", String.class);        // 调用方法        IBinder iBinder = (IBinder) method.invoke(null,                Context.TELEPHONY_SERVICE);        // 得到接口对象        ITelephony telephony = ITelephony.Stub.asInterface(iBinder);        // 结束通话        telephony.endCall();    }    @Override    public void onCreate() {        super.onCreate();        Log.e("TAG", "Service onCreate()");        // 得到电话管理器        tm = (TelephonyManager) this                .getSystemService(Context.TELEPHONY_SERVICE);        // 监听电话状态        tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);    }    @Override    public void onDestroy() {        super.onDestroy();        Log.e("TAG", "Service onDestroy()");        // 停止电话监听        tm.listen(listener, PhoneStateListener.LISTEN_NONE);    }}

 

转载于:https://www.cnblogs.com/znsongshu/p/9358769.html

你可能感兴趣的文章
ubuntu server 14.04 上安装jdk1.8
查看>>
python file.tell() 在windows下需要注意的地方
查看>>
10种简单的数字滤波C语言源程序算法
查看>>
oracle 中 dual 详解
查看>>
HDU1870 愚人节的礼物【堆栈+输入输出】
查看>>
什么是并发用户数?并发用户数怎么计算?
查看>>
1、Linux基础认识
查看>>
Git在Githib和Github上的使用
查看>>
visual studio 编辑窗口 设置固定选项卡 使窗口选项卡多行显示
查看>>
处在LV1太长了··
查看>>
软件工程综合实践阶段小结
查看>>
人工神经网络简介
查看>>
改善我们的神经网络
查看>>
文件操作的其他模式
查看>>
链表与顺序表的对比
查看>>
windows phone 8 新增功能:从一个应用程序启动另一个程序(file association 和 Protocol association两种方式)...
查看>>
Angularjs总结(七) 路由及请求服务等
查看>>
Bindservice开启服务特点
查看>>
centos session
查看>>
Google Code Jam 2014 资格赛:Problem D. Deceitful War
查看>>