//拦截短信验证码的广播
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();//拦截短信
}
}
}
コードには問題ありませんが、実装したい機能はあまり良くありません。電話のテキスト メッセージを傍受することは、現在のほとんどの携帯電話では不可能です。結局のところ、電話のテキスト メッセージは携帯電話の最も基本的な用途であり、APP をインストールしてこの機能に影響を与えることは不可能です。このコードは初期の Android バージョンでは実行可能でしたが、現在 Android ではシステム ブロードキャストを傍受するこの動作が大幅に制限されています。
Android 4.4 以降、アプリケーションがシステムの SMS アプリケーションではない場合、ブロードキャストを取得できません。 SMS の傍受は良いことではありません