处理Android中,设置应用的优先级最高,然而短信应用依然最先收到广播导致无法拦截短信的问题
巴扎黑
巴扎黑 2017-04-17 17:34:25
[Android讨论组]

//拦截短信验证码的广播

    IntentFilter intercptFilter = new IntentFilter();
    intercptFilter.addAction(SmsInterceptReceiver.ACTION_SMS_INTERCEPT);
    intercptFilter.setPriority(Integer.MAX_VALUE);
    smsInterceptReceiver = new SmsInterceptReceiver();
    mContext.registerReceiver(smsInterceptReceiver, intercptFilter);

//发送广播
context.sendOrderedBroadcast(intent, null);

@Override

public void onReceive(Context context, Intent intent) {
    // 拦截短信
    String action = intent.getAction();
    Log.d("打印广播类型:"+action);
    Bundle bundle = intent.getExtras();
    if(bundle==null){
        return;
    }

    if(action!=null&&action.equals(ACTION_SMS_INTERCEPT)){
        Object[] pdus = (Object[])bundle.get("pdus");

        if (pdus != null && pdus.length > 0)
        {
            SmsMessage[] messages = new SmsMessage[pdus.length];
            int length = messages.length;
            for (int i = 0; i < length; i++)
            {
                byte[] pdu = (byte[])pdus[i];
                messages[i] = SmsMessage.createFromPdu(pdu);
            }
            for (SmsMessage msg : messages){
                 // 获取短信内容
                String content = msg.getMessageBody();
                String sender = msg.getOriginatingAddress();
                analysisMessage(sender,content);
            }
            Log.d("是否要向用户显示短信,1是:"+isShowSms);
            if(isShowSms==1){
                abortBroadcast();//拦截短信
            }
        }
    }
巴扎黑
巴扎黑

全部回复(2)
PHP中文网

你的代码是没有问题的,但是你要实现的功能就有点不算是太好吧。拦截电话短信这中操作在现在大多数手机上是不行的,毕竟电话短信是手机的最基本用途,不可能安装个APP就让这种功能受影响。在早起的Android版本中这段代码是可行的,现在Android已经对这种拦截系统广播的行为做了很大限制。

迷茫

Android4.4以后.如果你的应用不是系统的短信应用你是没法抢到广播的。短信拦截不是什么好东西啊

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号