標籤:
系統收到簡訊是有廣播的,廣播中包含了簡訊的號碼和內容 ###簡訊防火牆* 系統傳送簡訊廣播時,是怎麼把簡訊內容存入廣播的,我們就只能怎麼取出來* 如果簡訊過長,那麼發送時會拆分成多條簡訊發送,那麼簡訊廣播中就會包含多條簡訊* 4.0之後,廣播接收者所在進程如果從來沒啟動過,那麼廣播接收者不會生效* 4.0之後,如果系統自動關閉廣播接收者所在進程,在廣播中的action跟該廣播接收者的action匹配時,系統會啟動該廣播接收者所在的進程,但是如果是使用者手動關閉該進程,那麼該進程會進入凍結狀態,再也不會啟動了,直到使用者下一次手動啟動該進程###廣播的分類#####無序廣播* 所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,並且是沒有先後順序,視為同時收到#####有序廣播* 所有與廣播中的action匹配的廣播接收者都可以收到這條廣播,但是是有先後順序的,按照廣播接收者的優先順序排序
package com.itheima.smslanjie;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //拿到簡訊的資訊 //簡訊內容封裝在intent中,廣播的資料是用Intent傳遞的 Bundle bundle = intent.getExtras(); //以pdus為鍵,取出一個object數組,數組中的每一個元素都是一條簡訊 Object[] objects = (Object[]) bundle.get("pdus"); //拿到廣播中的所有簡訊 for (Object object : objects) { //通過pdu來構造簡訊,SmsMessage表示簡訊對象。 SmsMessage sms = SmsMessage.createFromPdu((byte[])object); if(sms.getOriginatingAddress().equals("138438")){//通過地址攔截 //阻止其他廣播接收者收到這條廣播,則簡訊應用就收不到簡訊了,簡訊應用也是通過系統發送的廣播收到簡訊的, abortBroadcast();// SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, "你是個好人", null, null); System.out.println(sms.getMessageBody()); System.out.println(sms.getOriginatingAddress()); }// System.out.println(sms.getMessageBody()); } }}/* 資訊清單檔:<receiver android:name="com.itheima.smslanjie.SmsReceiver"><intent-filter android:priority="1000"> 防火牆優先順序高於簡訊應用則廣播接受者優先於簡訊應用接受簡訊廣播 <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 收到Telephony.SMS_RECEIVED這個廣播後調用SmsReceiver的方法</intent-filter></receiver>添加許可權<uses-permission android:name="android.permission.RECEIVE_SMS"/>*/
android85 簡訊防火牆