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)