Android SMS abort system default notify

本文介绍如何使用abortBroadcast()方法来中断Android中的广播传递,并通过示例代码展示如何设置优先级来确保特定接收器首先处理广播。此外,还介绍了如何在接收到短信时进行内容过滤。

简单的说下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"); 


 }

}

### 解决 Android 软件导致连接中止的问题 当遇到由 Android 应用程序引起的网络连接突然终止的情况时,可能的原因有很多。这可以涉及应用程序本身的错误、设备配置不当或是底层操作系统层面的因素。 对于 `cipso_rbm_structvalid` 参数设置的影响,在处理 IP 数据包选项编译期间会执行严格验证逻辑[^1]。如果此参数被设为 TRUE,则会对 CIPSO 选项实施非常严格的校验;反之则放宽这些检查标准。尽管如此,默认情况下该值设定为 FALSE(0),意味着更宽松的检验流程将会被执行,从而减少不必要的计算开销并提高效率。然而需要注意的是,某些特定环境下的其他实现或许依赖于更为严谨的数据包结构审查机制,因此在这种场景下可能会遭遇兼容性难题。 针对 Android 平台上的应用所引发的连接中断现象,建议采取如下措施: #### 日志分析 利用 Logcat 工具收集日志信息来定位具体原因。通过过滤关键字如 "network", "socket" 或者具体的异常名称可以帮助快速找到潜在问题所在之处。 ```bash adb logcat | grep -E 'network|socket' ``` #### 权限核查 确认应用程序拥有必要的权限来进行网络通信操作。缺少互联网访问许可 (`<uses-permission android:name="android.permission.INTERNET"/>`) 可能会导致无法建立正常的 TCP/UDP 连接。 ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <!-- Ensure internet permission --> <uses-permission android:name="android.permission.INTERNET"/> </manifest> ``` #### 网络状态监听 在代码内部加入对 Wi-Fi 和移动数据切换事件的支持,以便在网络条件变化时能够及时调整策略或提示用户当前状况。 ```java ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); if (!isConnected){ Toast.makeText(context,"No Internet Connection Available.",Toast.LENGTH_SHORT).show(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值