文档章节

《Android深入透析》之广播(Broadcast)

朵朵和糖糖
 朵朵和糖糖
发布于 2014/11/12 10:45
字数 2990
阅读 340
收藏 3

1.     概述

在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递。举一个大家都比较熟悉的例子来说明。在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频率的信号,然后大家通过将各自频率调成和电台相同的频率,就可以接受到广播内容了。在android中的广播其实是和这个是一样的效果的。 

2.     广播机制

android中广播机制体现在方方面面,各种广播在android系统中运行,当系统、应用程序运行时便会向android注册各种广播,例如当开机完成后,系统会发送一条广播,接受到这条广播就能及时的作出提示和保存数据的动作;当你安装卸载应用程序的时候系统都会发送广播,来监听这条广播,就可以作出相应的动作,同样的广播还有很多,比如电量多少,短信,来电等等。                                             

3.     发送和接收广播

3.1  广播定义

关于广播的定义,分为两种,动态注册和静态注册。

动态注册的广播接收器永远要快于静态注册的广播接收器,不管静态注册的广播接收器的优先级是否高于动态注册的广播接收器的优先级。

动态注册的广播不是常驻型的,他是跟随着activity的生命周期的。一般在开发中都会在onDestroy()方法中移除广播。静态注册的广播是常驻型的广播,也就是说当应用程序关闭的时候,如果有信息广播来,程序也会被系统调用。在同一优先级下,谁启动的快,谁将先收到广播。

3.2     静态广播

静态广播指的就是在AndroidManifest.xml配置文件中定义,
<receiver android:name=".DemoReceiver" android:exported="false">

     <intent-filter>

         <action android:name="com.example.broadcast1"/>

     </intent-filter>

</receiver>

android:name=".DemoReceiver"指的是静态广播的类名称,

android:exported="false"设置的属性,如果为true的话则可以允许被其他应用接受,如果是false话,只能被本应用内的接收器接收

<action android:name="com.example.broadcast1"/>指的是定义的广播的动作标准,就相当于广播的频率,只有当接收器指定相同的动作标准的时候,才可以接收到发送的广播内容

3.3     动态广播

动态广播需要通过代码的方式注册,注册广播接收器需要registerReceiver方法,注销广播接收器需要使用unregisterReceiver方法:

注册:

IntentFilter filter = new IntentFilter();

       filter.addAction("com.example.broadcast2");

registerReceiver(broadcastReceiver, filter);

解除:

unregisterReceiver(broadcastReceiver);

其中broadcastReceiver 为广播接收器对象

3.4     广播接收器

     3.4.1 发送广播

在说广播接收器之前,首先说一下是怎么发送广播的。无论是动态注册的还是静态注册的广播接收器,他的发送方法都是通过sendBroadcast方法来实现的,例如下代码:

Intent intent = new Intent();

       intent.setAction("com.example.broadcast2");

       intent.putExtra("name", "动态注册广播");

sendBroadcast(intent);

sendBroadcast方法中的intent指定广播接收器的动作,将要传递给广播接收器的内容放入到intent中

3.4.2广播接收

不管是动态广播还是静态广播,如果想接收到广播,都需要