Android基础(十)----广播机制

Android的广播机制:Android中的每个应用程序都可以对自己感兴趣的广播进行注册。

发送广播的方法:Intent

接收广播的方法:Broadcast Receiver广播接收器


Android中的广播类型:

  1. 标准广播:是一种完全异步执行的广播。在广播发出后,所有的广播接收器会在同一时间接收到该广播无任何顺序可言
  2. 有序广播:是一种同步执行的广播。在广播发出后,同一时刻只有一个广播接收器可以接收到这条广播消息,在当前广播接收器的逻辑执行完毕后,广播才会继续传递。这种形式的广播,其相对应的广播接收器是有优先级的,并且优先级高的广播接收器可以截断正在传递的广播,这样后面的广播接收器就无法接收到广播消息了。

广播注册:

1  动态注册:在代码中注册。

创建广播接收器:新建一个类,继承自BroadcastReceiver,并重写父类的onReceive()方法。当接收到广播时,onReceive()方法就会被执行 。

动态注册方法:新建一个类,继承自BroadcastReceiver类,重写父类的onReceive()方法。当有广播到来时,执行onReceive()方法。

=============================================常用方法===========================================

registerReceiver(BroadcastReceiver receiver,IntentFilter filter)注册广播监听事件

unregisterReceiver(BroadcastReceiver receiver)取消注册广播监听事件,动态注册的广播接收器一定要取消注册才行

扫描二维码关注公众号,回复: 3248072 查看本文章

===获取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来指定

  • 发送自定义广播

  • 发送标准广播:
  1. 建立一个广播接收器;
  2. 在AndroidManifest.xml对广播接收器进行修改,通过<intent-filter><action android:name="xxx" /></intent-filter>指定要接收的广播。
  3. 建立发送广播:首先构建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 发送本地广播比发送系统全局广播将会更加高效

猜你喜欢

转载自blog.csdn.net/andanwubian/article/details/81604176