//拦截短信验证码的广播
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();//拦截短信
}
}
}
Il n'y a aucun problème avec votre code, mais la fonction que vous souhaitez implémenter n'est pas très bonne. L'interception de messages texte téléphoniques n'est pas possible sur la plupart des téléphones mobiles aujourd'hui. Après tout, les messages texte téléphoniques constituent l'utilisation la plus élémentaire des téléphones mobiles. Il est impossible d'installer une application et de faire en sorte que cette fonction soit affectée. Ce code était réalisable dans les premières versions d'Android, mais Android a désormais considérablement restreint ce comportement d'interception des diffusions du système.
Après Android 4.4, si votre application n'est pas l'application SMS du système, vous ne pourrez pas récupérer la diffusion. L'interception de SMS n'est pas une bonne chose