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"); 


 }

}

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