Android SMS abort system default notify

簡單的說下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"); 


 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章