开发者社区> 范大脚脚> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

android85 短信防火墙

简介:
+关注继续查看
系统收到短信是有广播的,广播中包含了短信的号码和内容
  

###短信防火墙
* 系统发送短信广播时,是怎么把短信内容存入广播的,我们就只能怎么取出来
* 如果短信过长,那么发送时会拆分成多条短信发送,那么短信广播中就会包含多条短信
* 4.0之后,广播接收者所在进程如果从来没启动过,那么广播接收者不会生效
* 4.0之后,如果系统自动关闭广播接收者所在进程,在广播中的action跟该广播接收者的action匹配时,系统会启动该广播接收者所在的进程,但是如果是用户手动关闭该进程,
那么该进程会进入冻结状态,再也不会启动了,直到用户下一次手动启动该进程

###广播的分类
#####无序广播
* 所有与广播中的action匹配的广播接收者都可以收到这条广播,并且是没有先后顺序,视为同时收到
#####有序广播
* 所有与广播中的action匹配的广播接收者都可以收到这条广播,但是是有先后顺序的,按照广播接收者的优先级排序
复制代码
复制代码
package com.itheima.smslanjie;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //拿到短信的信息
        //短信内容封装在intent中,广播的数据是用Intent传递的
        Bundle bundle = intent.getExtras();
        //以pdus为键,取出一个object数组,数组中的每一个元素都是一条短信
        Object[] objects = (Object[]) bundle.get("pdus");
        //拿到广播中的所有短信
        for (Object object : objects) {
            //通过pdu来构造短信,SmsMessage表示短信对象。
            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());
                System.out.println(sms.getOriginatingAddress());
            }
//            System.out.println(sms.getMessageBody());
        }
    }
}
/*
 清单文件:
<receiver android:name="com.itheima.smslanjie.SmsReceiver">
<intent-filter android:priority="1000">  防火墙优先级高于短信应用则广播接受者优先于短信应用接受短信广播
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  收到Telephony.SMS_RECEIVED这个广播后调用SmsReceiver的方法
</intent-filter>
</receiver>
添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
*/
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4947572.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
KaiOS - 下一个 Android ?
KaiOS 目前是印度第二大最受欢迎的操作系统,是全球发展最快的智能手机市场。
1255 0
Android侧滑原来可以这么优雅
一个框架解决所有侧滑需求,所有功能都可一行代码完成调用
12934 0
Android原生方式获取经纬度
Android原生方式获取经纬度两种定位方式:GPS定位、WiFi定位优劣:   如果项目定位要求较高还是建议使用三方地图库 GPS定位相比Wifi定位更精准且可在无网络情况下使用,但在室内基本暴毙无法使用WiFi定位没有室内外限制也不需要开启GPS但需要联网,另外测试发现WiFi定位时onLoc...
3169 0
《深入解析Android 虚拟机》——导读
本节书摘来自异步社区《深入解析Android 虚拟机》一书中的目录,作者 钟世礼,更多章节内容可以访问云栖社区“异步社区”公众号查看
1502 0
Android串口通信
Android串口通信 串口通信偏向嵌入式一点,是Android设备通过串口与其他设备进行通信的一种方式,本文介绍的Android纯串口的通信,并不是手机上的USB串口通信。
2700 0
+关注
3656
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载