当前课程知识点:Android应用开发基础 > 第五章 广播 > 5.2 Android广播工作原理 > 5.2.2 实践案例-短消息接收
本节我们通过一个手机短信的实例
来介绍Android的系统广播
下面介绍短信接收过程
模拟器发送短信 应用程序可以收到并显示
首先创建一个应用程序
设置应用程序的名字
进入activity_mian布局
删除默认组件
修改布局类型为线性布局LinearLayout
设置线性布局的排列方式vertical
新建TextView组件
设置layout_height为0dp,layout_weight为1
设置文本为短信显示设置id为tv_charge
设置ListView组件
设置layout_height为0dp,layout_weight为9
设置TextView组件gravity属性为center
使文字居中
设置ListView组件id为lv_sms
下面介绍eventBus框架类的实现过程
复制eventBus的jar包
切换project模式,选中libs文件夹
粘贴放入
右键选中该jar包 选中 add as library导入
新建一个EventData类
定义私有整数型变量iEventCode
用来区分事件类型
定义私有字符串型变量strMsg
代表接收到的信息
定义各个变量的Get和Set方法
下面介绍短消息广播接收类的实现过程
新建一个SmsReceiver类
继承BroadcastReceiver,
Ctri+I,实现未实现的方法onReceive()
在AndroidManifest.xml文件中添加receiver信息
name为.SmsReceiver,enbled为true
exported为true
添加intent-filter
设置优先级为1000
设置action,它的name为
android.provider.Telephony.SMS_RECEIVED
复制该action 切换至SmsReceiver
定义公有静态字符串变量SMS为
android.provider.Telephony.SMS_RECEIVED
如果intent.getAction()不是SMS,返回空
调用intent.getExtras()得到传过来的bundle
如果bundle为空 返回空
得到名称为pdus对象 是一个Object数组
里面每一个元素为一个byte[]数组
创建getSmsMessage方法
返回SmsMessage数组 传入pdus对象
新建一个SmsMessage数组smsMessages
在for循环中 初始变量i等于0
i小于pdus的长度 i自增
解码短信内容
赋值给数组smsMessages第i个元素
返回数组smsMessages
返回onReceive方法 循环遍历messages数组
新建EventData类对象
设置iEventCode等于1
strMsg等于
message.getMessageBody().toString()
调用EventBus.getDefault().post(mEventData)
向EventBus发布事件
在AndroidManifest.xml文件中添加接收短信
读取短信的权限
下面介绍主视图MainActivity类的实现过程
选中activity_main布局文件
右键Generate-LayoutCreator,Confirm
自动生成组件初始化的代码
定义私有的泛型为String的适配器mArrayAdapter
定义私有泛型为String数组mSmsList并实例化
EventBus.getDefault().register(this);
注册EventBus
实例化mArrayAdapter 第一个参数为上下文
第二个参数为子项布局
第三个为存储数据数组
mLvSms设置适配器为mArrayAdapter
创建getSdpermissions方法 申请权限
alter+enter实现未实现的方法
ActivityCompat.checkSelfPermission检查权限
是否同意 第一个参数为当前上下文
第二个参数为读取短信的权限
如果Manifest.permission.READ_SMS
没有被授权
或者Manifest.permission.RECEIVE_SMS
没有被授权
ActivityCompat.requestPermissions请求权限
第一个参数为当前上下文
第二个参数为读取、接收短信权限
的字符串数组 请求码为1
实现回调函数onRequestPermissions方法
使用switchcase语句
如果requestCode等于1
如果权限没有授权
使用Toast提示You denied the permissions
定义一个公有方法mainThread()
接收的参数为EventData
接收的参数为EventData
将mainThread方法设置为Subscribe 订阅事件
如果eventData为空 返回为空
如果eventData.getiEventCode()等于1
把eventData.getStrMsg()添加到数组SmsList中
通知适配器数据更新
运行程序
可以收到模拟器发送的短信
这就是使用广播和eventBus
获取手机短信的全部内容
请大家按照讲课的内容实现手机短信的接收和显示
在Android的手机中运行
通过实例理解系统广播的内容获取
广播与Activity之间进行数据传递的流程
-Android Studio4.1.2安装常用问题汇总2021.3.15
-1.1 Android概述
--1.1 Android Studio安装与配置-实践案例
-1.1 Android概述--作业
-1.2 Android程序
-1.2 Android程序--作业
-1.3 Android程序调试
-1.3 Android程序调试--作业
-2.1 Activity概述
-2.1 Activity概述--作业
-2.2 Activity应用
-第2章 Android视图--2.2 Activity应用
-3.1 Activity布局
-3.1 Activity布局--作业
-3.2 Android基础组件
-3.2 Android基础组件--作业
-3.3 Android中级组件
-3.3 Android中级组件--作业
-3.4 Android适配器
-3.4 Android适配器--作业
-4.1 Fragment碎片组件
-4.1 Fragment碎片组件--作业
-4.2 ViewPager翻页类组件
-4.2 ViewPager翻页类组件--作业
-讨论:fragment与activity的生命周期有哪些不同?
-5.1 Android广播概述
-5.1 Android广播概述--作业
-5.2 Android广播工作原理
-5.2 Android广播工作原理--作业
-5.3 自定义广播
-第5章 广播--5.3 自定义广播
-5.4 有序广播
--5.4有序广播
-第5章 广播--5.4 有序广播
-6.1 系统服务概述
-6.1 系统服务概述--作业
-6.2 访问系统服务
-6.2 访问系统服务--作业
-6.3 自定义服务
-第6章 Android服务--6.3 自定义服务
-6.4 多线程
--6.4 多线程
-第6章 Android服务--6.4 多线程
-7.1 Android运行权限
-7.1 Android运行权限--作业
-7.2 URL URI概述
-第7章 内容提供者ContentProvider--7.2 URL URI概述
-7.3 ContentProvider概述
-第7章 内容提供者ContentProvider--7.3 ContentProvider概述
-7.4 访问通讯录
-第7章 内容提供者ContentProvider--7.4 访问通讯录
-7.5 课后作业案例
-8.1 相机服务
--8.1 相机服务
-8.1 相机服务--作业
-8.2 音视频服务
-8.2 音视频服务--作业
-9.1 网络服务概述
-9.1 网络服务概述--作业
-9.2 网络框架
--9.2 网络框架
-9.2 网络框架--作业
-9.3 Json
--9.3 Json
-第9章 网络技术--9.3 Json
-9.4 Volley
-第9章 网络技术--9.4 Volley
-10.1 文件存储
--10.1.3 实践案例-SharedPreference文件读写
-10.1 文件存储--作业
-10.2 数据库存储
-10.2 数据库存储--作业
-第1章 实训简介以及开发环境配置
-第2章 在线音乐播放器整体设计以及服务端开发
-第3章 在线音乐播放器-客户端开发
-第4章 在线音乐播放器-完整版
-第5章 QQ聊天项目
-第6章 在线点餐系统