1.什么是BroadcastReceiver?
本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭。而BroadcastReceiver是系统级别的监听器,只要存之匹配的intent被广播出来,BroadcastRecevier就会被激发。
2.如何使用BroadcastRecevier
原理:子类继承BroadcastReceiver,并为该子类添加intent描述,当程序发送intent的时候,intent会进行匹配搜索,当与该子类的intent描述相一致的时候,就会调用子类的onRecevie()方法
步骤一:子类继承BroadcastReceiver并重写onReceive()
public class FirstBroadcast extends BroadcastReceiver {
private static final String TAG = "FirstBroadcast";
@Override
public void onReceive(Context context, Intent intent) {
//当Broadcast被intent启动的时候调用该方法
Log.d(TAG,"The Broadcast start");
}
}
步骤二:添加intent描述(有两种方式)
<!--方法一:在AndroidManifest.xml中注册-->
<receiver android:name=".FirstBroadcast">
<intent-filter>
<!--name可以系统给的也可以是自定义的-->
<action android:name="com.chen.firstBroadcast"/>
</intent-filter>
</receiver>
//方法二:在Activity代码中编写
public class MainActivity extends AppCompatActivity {
private FirstBroadcast mFirstBroadcast; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mFirstBroadcast = new FirstBroadcast();//创建Broadcast
IntentFilter intentFilter = new IntentFilter();//创建intent描述
intentFilter.addAction("com.chen.FirstBroadcast");//将描述装入
registerReceiver(mFirstBroadcast,intentFilter);//注册到Broadcast
}
}
步骤三:利用Intent发送给Broadcast
//在MainActivity中
Intent intent1 = new Intent("com.chen.FirstBroadcast");、、刚在注册的描述
sendBroadcast(intent1);
3.有序广播和普通广播
普通广播(Normal Broadcast):可在同一时刻被所有接收者接收到,所以说缺点是:无法将数据结果传递给下一个。
sendBroadcast()发送无序广播
有序广播(Ordered Broadcast):有序广播的接收者按照之前定义的优先级依次接收Broadcast,如:A>B>C,则A先收到,然后B,最后C。
设置优先级①在AndroidManifest的<Intent-filter android:priority=数值> ②在代码的IntentFilter对象的 setPriority()取值范围是1~1000
sendOrderedBroadcast()发送有序广播。
同时,优先收到广播的接收者可以停止继续发送Broadcast:调用abortBroadcast();
优先收到广播的接收者可以通过setResultExtras(Bundle)将数据存入Broadcast,然后传送给下一个接收者,下一个接收者通过Bundle bundle = getResultExtras(true);
接收数据
4.注解
1.若BroadRecevier的onRecevie()不能再10秒内完成的话,Android会认为该程序无响应。
2.系统收到短信发出的Broadcast属于Ordered Broadcast。
5.作用
1.Service与Activity之间交互的桥梁
2.接收系统发出的Broadcast(系统发出的常用广播:http://blog.sina.com.cn/s/blog_7dbac1250101mt5h.html)