处理Android中,设置应用的优先级最高,然而短信应用依然最先收到广播导致无法拦截短信的问题

浏览:72日期:2022-12-06

问题描述

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

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();//拦截短信 }} }

问题解答

回答1:

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

回答2:

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

相关文章: