android四大组件之broadcast

来源:互联网 发布:安卓全球电视直播软件 编辑:程序博客网 时间:2024/06/02 19:28
广播就像上学时的大喇叭一样,接收广播需要广播接收器。广播分两种,有序广播与标准广播:
标准广播:所有接收者一起收到广播,此类广播无法被拦截。
有序广播:优先级高的接收者会先接到广播并处理,每次只会有一个接收者可以接收,可拦截,
拦截后其它接收者就接收不到此广播了
上面提到了广播接收者,那这个接收者是如何接收广播的呢?
我们需要建一个类来继承BroadcastReceiver并重写onReceive方法,当有广播时onReceive方法
就会被调用,所以onReceive里面就要写接收到广播的处理代码。
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.getAction(),0).show();
}
}
广播和四大组件中其它的一样也要注册,注册分为动态注册和静态注册
动态注册:在activity代码中new一个刚才建的接收者实例,创建intentFilter并添加action,这个action
就决定了我们的接收者要接收什么广播,再用registerReceiver方法进行动态注册,要注意动态注册
需要在我们不用或activity销毁时用unregisterReceiver注销
IntentFilter filter = new IntentFilter("XXX");
        registerReceiver(new MyReceiver(), filter);
静态注册:这种就要在配置文件中加入<receiver>标签了,和activity的注册差不多,静态注册的优点就是
可以在不启动程序的情况下监听接收一些广播,priority属性就可以设置优先级
<receiver android:name="OrderReceiver1">
            <intent-filter android:priority="10">
                <action android:name="com.hao.broadcast.action.ORDER_BROADCAST"/>
            </intent-filter>
        </receiver>
现在我们可以接收系统的广播了,那如果我们想自定义广播又该如何发送出去?其实很简单,
发送标准广播:用sendBroadcast(Intent intent);就可以发送了
sendBroadcast(new Intent("com.hao.broadcast.myBroadcast"));
发送有序广播:sendOrderedBroadcast(Intent intent, String receiverPermission);第二个参数是权限,
不需要直接传null就可以。
我们发的广播其他程序也可以接收,之前说过有序广播是可以拦截的,在onReceive中用abortBroadcast方法
就可以拦截广播了
到现在为止我们发的广播都可以被其他程序接收,那这样可能会有一些安全问题,能不能发送只能被自己程序接收
的广播呢?当然可以了,只要用LocalBroadcastManager.getInstance获取到本地广播实例,然后注册和发送
广播都改用localBroadcastManager的registerReceiver和sendBroadcast方法就行了。
还有一点很重要,广播的生命周期只有10s左右,所以不能进行耗时操作。
0 0
原创粉丝点击