BroadcastReceiver

2017-03-16  本文已影响51人  ChongmingLiu

BroadcastReceiver是android四大组件之一。

系统在产生某个事件时发送广播,应用程序使用广播接收器接收这个广播,就知道系统产生了什么事件。

创建自定义的接收器继承BroadcastReceiver 即可。

 public class MyBroadcastReceiver extends BroadcastReceiver {
     @Override  
     public void onReceive(Context context, Intent intent) {  
         // 此处用于收到广播消息后进行逻辑处理
         // 我们可以通过Intent来传递数据
     }
 }
// android:priority 属性可有可无,如果想声明有序广播,需要加上优先级,普通广播不需要加
<receiver android:name=".MyBroadcastReceiver">  
            <intent-filter android:priority="1000">  
                <action android:name="android.intent.action.TEST_BROADCAST"/>  
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>  
</receiver>
Intent intent = new Intent("android.intent.action.TEST_BROADCAST");
this.getContext().sendBroadcast(intent);//sendBroadcast是android.content.ContextWrapper类中的方法

配置了以上信息之后,通过为Intent设置广播地址,发送广播后,对应的接收器就可以接收广播了。

- **动态注册**:动态注册是在代码中动态的声明广播地址并注册,通常我们是在Activity或Service注册一个广播,此时广播接收器的生命周期和Activity或者Service绑定。Activity和Service处于运行状态才可以接收广播消息,Activity被销毁或者Service停止,相应的接收器也被销毁,并且取消注册。

示例:

// 创建IntentFilter过滤器以及广播接收器
IntentFilter filter = new IntentFilter();
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
// 动态注册
this.filter.addAction("android.intent.action.MY_BROADCAST");
this.getContext().registerReceiver(receiver, filter);
// 切记:动态注册需要重写onDestory方法,用于取消接收器的注册
    @Override
    public void onDestroy() {
        this.getContext().unregisterReceiver(receiver);
        super.onDestroy();
    }
// 发送广播代码,只要给Intent配置对应的ACTION即可
Intent intent = new Intent("android.intent.action.MY_BROADCAST");
this.getContext().sendBroadcast(intent);

示例代码:

Intent intent = new Intent("android.intent.action.MY_BROADCAST");  
intent.putExtra("msg", "hello receiver.");  
sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION"); 

使用sendOrderedBroadcast方法发送有序广播时,需要一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。这样做是从安全角度考虑的,例如:系统的短信就是有序广播的形式,一个应用可能是具有拦截垃圾短信的功能,当短信到来时它可以先接受到短信广播,必要时终止广播传递,这样的软件就必须声明接收短信的权限。

<!-- 声明权限 -->
<permission android:protectionLevel="normal"  android:name="scott.permission.MY_BROADCAST_PERMISSION" /> 
<!-- 然后声明使用了此权限 -->
<uses-permission android:name="scott.permission.MY_BROADCAST_PERMISSION" />   

如果想在有序广播中截断广播消息的话,只需要在接收器的onReceive方法中调用abortBroadcast()即可截断优先级小于自己的接收器接收广播。

上一篇 下一篇

猜你喜欢

热点阅读