一、广播机制的基本概念
当某个事件产生时(如一条短信发来或一个电话打来),android操作系统会把这个事件广播给所有注册的广播接收者,需要处理这个事件的广播接收者进行处理。其实这就是日常生活中的广播。发生一个新闻后,广播电台会广播这个新闻给打开收音机的人,对这个新闻感兴趣的人会关注,可能会拿笔记下。新闻就是事件,广播电台就是android系统,打开收音机的人就是广播接收者,感兴趣的人就是需要处理该事件的广播接收者,拿笔记下就是对该事件进行的操作。
二、广播的分类——普通广播和有序广播
①普通广播:完全异步,逻辑上可以被任何广播接收者接收到。优点是效率较高。缺点是一个接收者不能将处理结果传递给下一个接收者,并无法终止广播intent的传播。
②有序广播:按照被接收者的优先级顺序,在被接收者中一次传播。比如有三个广播接收者A,B,C,优先级是A > B > C。那这个消息先传给A,再传给B,最后传给C。每个接收者有权中终止广播,比如B终止广播,C就无法接收到。此外A接收到广播后可以对结果对象进行操作,当广播传给B时,B可以从结果对象中取得A存入的数据。如系统收到短信发出的广播就是有序广播。
三、注册广播接收者的两种方式
①在AndroidManifest.xml中注册
在配置文件中注册的接收者的特点是即使应用程序已被关闭,该接收者依然可接受它感兴趣的广播,比如手机电池电量的广播接收者,没有必要将某个程序开启。下面的例子1、2广播接收者会接收到拨打电话的广播。
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 广播接收者1-->
<receiver android:name=".BroadcastReceiver1">
<intent-filter>
<action android:name="android.intent.action.CALL"></action>
</intent-filter>
</receiver>
<!-- 广播接收者2 -->
<receiver android:name=".BroadcastReceiver2">
<intent-filter>
<action android:name="android.intent.action.CALL"></action>
</intent-filter>
</receiver>
<!-- 广播接收者3 -->
<receiver android:name=".BroadcastReceiver3">
<intent-filter>
<action android:name="android.intent.action.PICK"></action>
</intent-filter>
</receiver>
</application>
/**
* 模拟拨打电话广播
*
* @author 徐越
*
*/
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
this.sendBroadcast(intent);
}
}
/**
* 每次接收广播都会生成新的BroadcastReceiver1,当处理完onReceive方法后就不会再被使用
* 再次接收就在生成新的BroadcastReceiver1对象
*
* @author 徐越
*
*/
public class BroadcastReceiver1 extends android.content.BroadcastReceiver
{
public BroadcastReceiver1()
{
Log.i("xy_Receiver", "construtor1");
}
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("xy_Receiver", "onReceive1");
}
}
/**
* 广播接收者2
*
* @author 徐越
*
*/
public class BroadcastReceiver2 extends android.content.BroadcastReceiver
{
public BroadcastReceiver2()
{
Log.i("xy_Receiver", "construtor2");
}
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("xy_Receiver", "onReceive2");
}
}
/**
* 广播接收者3
*
* @author 徐越
*
*/
public class BroadcastReceiver3 extends android.content.BroadcastReceiver
{
public BroadcastReceiver3()
{
Log.i("xy_Receiver", "construtor3");
}
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("xy_Receiver", "onReceive3");
}
}
②在Activity中注册
在Activity中绑定接收者必须依附该应用程序存在,或者一个BroadcastReceiver用于更新UI,就没有必要再程序关闭时接收者还运行,故无需在AndroidManifest.xml中注册而可以放在Activity中注册。
/**
* Activity中注册广播接收者
*
* @author 徐越
*
*/
public class MainActivity extends Activity
{
private BroadcastReceiver receiver;
private static final String CALL_ACTION = "android.intent.action.CALL";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 模拟发送一个电话的广播
*
* @param v
*/
public void sendBroadCast(View v)
{
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
this.sendBroadcast(intent);
}
public void bindReceiver(View v)
{
receiver = new BroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(CALL_ACTION);
this.registerReceiver(receiver, intentFilter);
}
public void unBindReceiver(View v)
{
this.unregisterReceiver(receiver);
}
}
public class BroadcastReceiver extends android.content.BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("xy", "receiver");
}
}
分享到:
相关推荐
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
Android自学笔记-17-广播接收者(BroadcastReceiver)
Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理
10.1.1全局事件——广播(BroadcastReceiver)[归纳].pdf
android BroadcastReceiver两种注册方式:1.在AndroidManifest.xml中注册 2.在Activity中注册。两种注册BroadcastReceiver方法的比较: 现在我们了解了两种注册BroadcastReceiver的方法之后,需要考虑一下这两种方法...
演示了BroadcastReceiver的简单用法。
广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据; 广播意图就是通过Context....
NULL 博文链接:https://jiangnanlove.iteye.com/blog/1333335
广播接收器-BroadcastReceiver 电池电量显示
初中级Android开发社招面试之Service及BroadcastReceiver
初中级Android开发社招面试之Service及BroadcastReceiver
安卓四大组件——BroadcastReceiver(广播)
主要为大家详细介绍了Android BroadcastReceiver接收收到短信的广播,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
广播,这个诞生于1906年的科技产品,持续...Android通过广播机制,能够让订阅者接受到想听到的广播,并进行进一步的处理和操作。如果你想在虚拟的android世界中创建属于你自己的电台广播,那么就赶紧点击本集视频观看吧
嵌入式Android项目设计与开发 第五章 广播 ——广播的概念 概念 广播:广播是Android四大组件之一。系统中某种事件产生后会往外发送一个消息,该消息可以发送到系统每一个角落(这种消息也可以用户自己发出)。这种...
广播的的教学demo实例;适合初学的学生。 动态注册广播; 静态注册广播; 有序广播;
本例中是使用aidl Android Interface Definition Language 实现两种方式拦截来电 使用广播监听拦截(其中有动态广播注册和静态广播注册)和phoneManager类监听手机状态拦截
主要介绍了Android BroadcastReceiver广播注册方式总结的相关资料,需要的朋友可以参考下