Android的广播机制:Android中的每个应用程序都可以对自己感兴趣的广播进行注册。
发送广播的方法:Intent
接收广播的方法:Broadcast Receiver广播接收器
Android中的广播类型:
- 标准广播:是一种完全异步执行的广播。在广播发出后,所有的广播接收器会在同一时间接收到该广播,无任何顺序可言。
- 有序广播:是一种同步执行的广播。在广播发出后,同一时刻只有一个广播接收器可以接收到这条广播消息,在当前广播接收器的逻辑执行完毕后,广播才会继续传递。这种形式的广播,其相对应的广播接收器是有优先级的,并且优先级高的广播接收器可以截断正在传递的广播,这样后面的广播接收器就无法接收到广播消息了。
广播注册:
1 动态注册:在代码中注册。
创建广播接收器:新建一个类,继承自BroadcastReceiver,并重写父类的onReceive()方法。当接收到广播时,onReceive()方法就会被执行 。
动态注册方法:新建一个类,继承自BroadcastReceiver类,重写父类的onReceive()方法。当有广播到来时,执行onReceive()方法。
=============================================常用方法===========================================
registerReceiver(BroadcastReceiver receiver,IntentFilter filter)注册广播监听事件
unregisterReceiver(BroadcastReceiver receiver)取消注册广播监听事件,动态注册的广播接收器一定要取消注册才行。
===获取Connectivitymanager的实例,getSystemService()方法是一个系统服务类中的方法,该类专门用于管理网络连接====
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
================================获取Networkinfo实例==============================================
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
networkInfo.isAvailable()代表网络连接是可用的
2 静态注册:在AndroidManifest.xml中注册
在AndroidManifest.xml文件中增加<receiver> </receiver>标签。需要指定具体注册哪一个广播接收器,通过android:name来指定
-
发送自定义广播
- 发送标准广播:
- 建立一个广播接收器;
- 在AndroidManifest.xml对广播接收器进行修改,通过<intent-filter><action android:name="xxx" /></intent-filter>指定要接收的广播。
- 建立发送广播:首先构建Intent对象,把要发送的广播的值键入,然后调用Context的sendBroadcast()方法将广播发送出去。这样所有监听android:name的广播接收器都会接收到消息。
- 发送有序广播:
发送有序广播只需要将发送广播的Context对象的sendBroadcast()方法修改为sendOrderedBroadcast()方法。该方法需要传入两个参数,第一个参数是携带广播信息的Intent,第二个参数是一个与权限相关的字符串。
在AndroidManifest.xml的<application>标签内的<receiver>中的<intent-filter>标签中通过android:priority="value"设定优先级。
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<!--指定该广播接收器接收什么广播-->
<action android:name="com.example.broadcasttest.MY_BROADCAST"></action>
</intent-filter>
</receiver>
可以通过在广播接收器中,使用abortBroadcast()方法,将接收的广播截断,这样后续的广播接收器就接收不到广播了。
===========================================使用本地广播===========================================
使用本地广播主要是通过一个LocalBraodcastManager来对广播进行管理,该管理器提供了发送广播和注册广播接收器的方法。
注:本地广播是无法通过静态注册的方式来接收的。
本地广播的优势:1 可以明确知道正在发送的广播不会离开我们的程序,因此不必担心机密数据泄露。2 其他的程序无法将广播发送到我们的程序内部,因此不需要担心会有安全漏洞的隐患。3 发送本地广播比发送系统全局广播将会更加高效