Android开发_BroadcastReceiver组件

来源:互联网 发布:c 游戏编程贪吃蛇 编辑:程序博客网 时间:2024/06/05 18:03

BroadcastReceiver介绍

BroadcastReceiver 即“广播接收者”,常用来接收来自系统或应用的广播(Intent)。在Android系统中,有时候会发送一些广播,如系统启动完毕时,系统电量不足时等等;开发者可以通过接收这些不同的广播来进行一些相关的操作。通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者(BroadcastReceiver)所接收。 

BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者通过 NotificationMananger 提醒用户,或者启动 Service 等等。

public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("onReceive");}}


注册广播接收者(BroadcastReceiver)的方式

1、静态注册

// 在AndroidManifest.xml文件中<receiver android:name=".MyBroadcastReceiver"><intent-filter><action android:name="android.intent.action.MY_BROADCAST"/><category android:name="android.intent.category.DEFAULT" /></intent-filter></receiver>
注意:这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyBroadcastReceiver也会被系统调用而自动运行。

2、动态注册

动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播

// 注册receiverMyBroadcastReceiver receiver = new MyBroadcastReceiver();IntentFilter filter = new IntentFilter();filter.addAction("包名.intent.action.MY_BROADCAST");        registerReceiver(receiver, filter);// 取消注册unregisterReceiver(receiver);
注意:当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。动态注册方式与静态注册相反,不是常驻型的,也就是说广播会跟随程序的生命周期。


广播的类型

1、普通广播(Normal Broadcast)

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。方法:sendBroadcast(intent)。

2、有序广播(Ordered Broadcast)

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播,可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播。方法:sendOrderedBroadcast(intent, receiverPermission),该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高。

3、无序广播

通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,  initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: <uses-permission android:name="android.permission.BROADCAST_STICKY" />权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉,一般较少用。

0 0