一、注册广播的方式
动态注册:在代码中;静态注册:在清单文件中
如何创建一个广播接收器呢?
答:新建一个类,让它继承BroadcastReceiver,并重写父类的onReceiver()方法就行了,这样当有广播到来时,onReceicer()方法就会得到执行,具体的逻辑就可以在这个方法中处理。
举例:动态注册编写一个监听网络变化的程序
提醒网络变化还不够人行话,希望能准确告知用户当前是有网还是无网,我们进行对上面的代码进行优化
二、静态注册广播
这里借用JingXingLiang博主文章,感谢!
三、发送标准广播
是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此他们之间没有先后顺序。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
1、新建一个MyBroadcastReceiver用来接收广播
2、静态注册广播,看打钩
3、新建一个活动用来发送一个值为android.intent.action.BOOT_COMPLETED的广播
(1)、编辑一个按钮
(2)、编辑活动文件
四、发送有序广播
是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播的消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播就无法收到广播的消了。
1、新建另一个项目BroadcastTest2,将项目创建好之后定一个广播接收器,用于上一小节中的自定义广播,新建AndroidBroadcastReceiver
2、在清单文件里对这个广播器进行修改,监听com.example.broadcasttest.MY_BROADCAST这条广播
3、回到BroadcastTest项目,修改代码
做好这一步就可让BroadcastTest2程序接收到广播,那么想要让广播有一个先后顺序接收的话,在清单文件里设置android:priority属性给广播接收器设置一个优先级
那么如皋想在BroadcastTest程序里将广播截断,在广播接收器里添加一句abortBroadcast();
五、使用本地广播
前面发送和接收的广播全部属于系统全局广播,即发出的广播可以被其它任何应用程序接收到,并且也可以接收来袭于其它任何应用程序的广播,这样就很容易引起安全性问题,比如我们发送的一些广播携带关键性的数据有可能会被其它的应用程序截获,或者其他程序不断的向我们广播接收器里发生各种垃圾广播。
为了简单第解决广播传播的问题,android引入了一套本地广播机制,使用这个广播机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序的广播。
本地广播的用法并不复杂,主要就是使用了LocalBroadcastManager来对广播进行管理,并提供了发送和注册广播接收器的办法。
本地广播是无法通过静态注册的方式来接收,因为静态注册主要是为了让程序在未启动的情况下也能接收到广播,而发送本地广播时,我们的程序是肯定启动了,因为也完全不需要使用静态注册的功能。
1、可以明确的知道正在发送的广播不会离开我们的程序,因此不必担心机密数据泄露。
2、其它的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全漏洞的隐患。
3、发送本地广播比发送系统全剧广播将会更叫高效。
根据郭霖大神的《第一行代码》学习,敬礼!