电话拦截问题

电话拦截问题

调用系统的服务,电话管理器去监听打电话的状态,当电话改变的时候去拦截电话

寻找API时候,挂断电话,调用系统的隐藏API,遇到问题怎么看方法和调用

04.安卓框架的在线源码
http://grepcode.com/ 看源码要用LInux去下载,搞不定

05.完整的源码环境
http://androidxref.com/ 可以找到源码

调用接口中的方法,通过调用远程服务实现,远程服务的方法又被隐藏了不能调用,用反射区调用方法,完成。


短信拦截

// 2. 电话拦截
    // 1) 知道电话什么时候拨入
    // 2) 通过代码去挂电话

    mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

    mCallListener = new CallListener();
    // 注册电话的监听
    mTm.listen(mCallListener, PhoneStateListener.LISTEN_CALL_STATE);


private class CallListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, final String incomingNumber) {
        // * @see TelephonyManager#CALL_STATE_IDLE:闲置状态
        // * @see TelephonyManager#CALL_STATE_RINGING:响铃状态
        // * @see TelephonyManager#CALL_STATE_OFFHOOK:摘机状态,接听电话状态
        // state
        // incomingNumber:拨入的号码

        if (state == TelephonyManager.CALL_STATE_RINGING) {
            // 响铃时,正在拨入时
            int type = mDao.findType(incomingNumber);
            // 判断是否是被拦截的电话
            if (type == BlackBean.TYPE_CALL || type == BlackBean.TYPE_ALL) {
                // 通过代码去挂断电话
                Log.d(TAG, "通过代码去挂断" + incomingNumber + "电话");
                // TODO:

                // 1) ITelephony 实例
                // a. ITelephony.aidl添加到代码中--》ITelephony.java
                ITelephony iTelephony = null;

                // TelephonyManager.getITelephony()-->ITelephony
                // 通过反射调用TelephonyManager.getITelephony()--->不可行的
                // try {
                // Method method = TelephonyManager.class
                // .getDeclaredMethod("getITelephony");
                // iTelephony = (ITelephony) method.invoke(mTm);
                // } catch (Exception e) {
                // e.printStackTrace();
                // }

                // ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));

                // IBinder ibinder = ServiceManager
                // .getService(Context.TELEPHONY_SERVICE);
                try {
                    Class<?> clazz = Class
                            .forName("android.os.ServiceManager");
                    Method method = clazz.getMethod("getService",
                            String.class);
                    IBinder ibinder = (IBinder) method.invoke(null,
                            Context.TELEPHONY_SERVICE);
                    iTelephony = ITelephony.Stub.asInterface(ibinder);

                    // 2) ITelephony.endCall();
                    iTelephony.endCall();// 异步操作

                    // // 通过线程睡一会
                    // Thread.sleep(300);

                    // 删除通话记录
                    final ContentResolver cr = getContentResolver();
                    final Uri url = CallLog.Calls.CONTENT_URI;

                    // content://calls
                    // content://calls/1/100
                    // notifyForDescendents: true
                    // -->url下面的任何分支发生改变,都会通知对应的observer
                    // fasle-->只通知当前的url
                    cr.registerContentObserver(url, true,
                            new ContentObserver(new Handler()) {
                                @Override
                                public void onChange(boolean selfChange) {
                            String where = CallLog.Calls.NUMBER
                                    + "=?";
                            String[] selectionArgs = new String[] { incomingNumber };
                            cr.delete(url, where, selectionArgs);

                            // 注销
                            cr.unregisterContentObserver(this);
                                }
                            });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值