短信防火墙

来源:互联网 发布:pk10北京赛车开奖源码 编辑:程序博客网 时间:2024/05/17 22:04
注意事项:这句话被谷歌公司屏蔽,所以只能手打
<receiverandroid:name="com.example.notefirewall.SmsReceiver">
           <intent-filter>
               <action  android:name="android.provider.Telephony.SMS_RECEIVED"/>              
           </intent-filter>
</receiver>

特别注意:
<intent-filterandroid:priority="1000">
我们可以看到这一点,设置这个优先级的值,值域是1000到-1000
这就是我们看到的
abortBroadcast();为什么拦截没有生效,因为你的优先级比你正常的优先级低,结果就先显示了,而拦截在后面权限低所有没有出现改动。

特别注意:如果我们想让这个短信防火墙不被使用者知道,而拦截他的短信,我们可以将配置清单文件中的<intent-finter>去掉,他就没有了入口,也就意味着没有可供activity界面所展示的界面,那么我们只能在后台的文件运行管理,慎用。(这个的前提是启动过一次)


4.0版本之后,广播接收者所在的进程如果从来没有启动过。那么广播接收者是不会生效的
4.0版本之前,如果系统自动关闭广播接收者所在的进程,在action匹配时,但是用后手动关闭,就会冻结,使其无法自动开启,当用户手动打开,才会恢复。



系统发送短信广播的时候,是怎么把短信内容存入广播的,我们就只能怎么取出来
如果短信过长,那么短信发送时候会拆分成多条广播发送,那么短信广播中就会包含多条广播。

     publicvoidonReceive(Context context, Intent intent) {
          //TODOAuto-generated method stub
       //拿到短信的信 息
          //短信内容封装在intent中
          Bundle bundle = intent.getExtras();
          //以pdus为键,取出一个数组
          Object[] objects = (Object[]) bundle.get("pdus");
          
          //拿到广播中的所有短信
          for(Object object : objects) {
              //通过pdu来构造短信
              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());
          }
       
     }




0 0
原创粉丝点击