实现效果
首先来看项目效果
核心代码
广播接收者
因为是一个系统广播,所以只用写receiver,不用写sendBroadcast。接收者收到短信后,启动音乐播放服务,再启动MainAcativity。代码如下
主界面程序
当短信到来时,启动音乐播放服务,并且设置一个停止按钮。用一个Boolean型变量来判断是否为广播被激活。以下为部分代码
播放音乐
在res文件夹下新建一个raw文件夹,音乐文件放到raw里。具体播放音乐代码
清单文件的注册
在清单文件里配置短信权限、广播接收者组件的意图过滤器。
相关学习:显隐式调用intent
intent分为显式与隐式两种调用方式。因为这个短信到来是系统调用,所以可以显式调用Intent。但如果是自己练手demo,由于是一个无名intent,要将它传出去,这时就得隐式调用。
隐式调用:隐式Intent它不明确指出我们想要启动哪一个活动,既不需要获取当前的context。而是指定了一系列更为抽象的action和category等信息来过滤,找到符合条件的Activity。常用的方法有setAction(),setData()等。
效率对比:
显式意图优点是效率高,系统直接精确定位要启用的组件,但耦合度也高,如果通过这种方式调用一些系统组件的话,容易因为版本更新,类名、包名、包结构变化等原因导致程序崩溃。
隐式意图能够降低程序的耦合度,但由于每次意图执行的时候,系统都会搜索所有可用的intentfilter,来查看是否有匹配的内容,所以效率更低。所以具体的使用还要看具体的情况。
总结
这次学习,让我对Broadcast有了一个基础的认识,对intent也有了更加深入的了解。(虽然intent学习跟本次作业没有多大关系)
第三次作业链接:https://gitee.com/ftlalala/Broadcast