簡單的說下abortBroastcast()的作用,發送廣播時有senbroadcast和sendOrderBroadcast(),後一個是帶優先級的,即在receiver的<intent-filter android:priority="300">,其中數值越大,優先級越高,就會先收到廣播,如果不想比他優先級低的人受到這個信息,那就在onReceiver()方法的最後加上這個abort,這樣就中斷了廣播的繼續傳遞
<mestfile.xml>
<receiver android:name=".SmsMessageReceiver" >
<intent-filter android:priority="1000"> //優先級一定要加入
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
public class SmsMessageReceiver extends BroadcastReceiver {
private final static String TAG = "SmsMessageReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, ">>>>>>>onReceive start");
// 第一步、獲取短信的內容和發件人
boolean flags_filter = false;
StringBuilder body = new StringBuilder();// 短信內容
StringBuilder number = new StringBuilder();// 短信發件人
Bundle bundle = intent.getExtras();
Log.i(TAG,"receiver action = "+ intent.getAction());
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
number.append(currentMessage.getDisplayOriginatingAddress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
Log.e(TAG, "smsBody="+smsBody+",\n smsNumber="+smsNumber);
Toast.makeText(context, "smsBody="+smsBody+",\n smsNumber="+smsNumber, Toast.LENGTH_SHORT).show();
if (smsNumber.contains("+86")) {
smsNumber = smsNumber.substring(3);
}
// 第二步:確認該短信內容是否滿足過濾條件
if (smsNumber.equals("xxxxxxxxx")) {// 屏蔽某個號碼發來的信息
flags_filter = true;
Log.v(TAG, "sms_number.equals(10086)");
}
// 第三步:取消
if (flags_filter) {
this.abortBroadcast(); //This method does not work with non-ordered broadcasts such as those sent with
Context.sendBroadcast
}
}
Log.v(TAG, ">>>>>>>onReceive end");
}
}