标签:
1.创建broadcastreceiver;
创建自己的广播接收器,继承自broadcastreceiver;
实现其中的onreceive()方法;
其中context,为发送广播的context,intent为发送的广播内容;
在onReceive方法内,我们可以获取随广播而来的Intent中的数据;
2.注册自己的广播接收器;
方法一:静态注册;
在manifest中注册;
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_BROADCAST"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
其中action就是接收的广播内容;category应该是广播类型默认;
此种类型下当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行;
方法二:动态注册;
动态注册一般在活动或服务中进行;
生成一个自己定义的broadcastreceiver对象;
MyReceiver receiver = new MyReceiver();
//添加要接受的广播
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MY_BROADCAST");
注册广播;
registerReceiver(receiver, filter);
同时动态注册需要在活动销毁,或服务销毁时解除绑定;
unregisterReceiver(receiver);
生命周期会跟随活动或服务;
3,发送广播;
Intent intent = new Intent("android.intent.action.MY_BROADCAST");//添加你要发送的广播类型;
intent.putExtra("msg", "hello receiver.");//添加广播里的内容;
sendBroadcast(intent);
其中sendBroadcast也是android.content.ContextWrapper类中的方法,它可以将一个指定地址和参数信息的Intent对象以广播的形式发送出去。
4、广播的类型;
一、普通广播;
就相当于老师在课堂上讲课,老师的声音会同时传递给所有的学生,每个学生也不能阻止其他学生听到老师的声音;
此时发送广播用sendBroadcast方法;而且不需要设置每个广播接受者的优先级;
二、有序广播;
相当于公司安排任务,总经理安排给经理,经理安排给主管,主管安排给员工,每一层都有权利不传递消息,并且受到消息的先后顺序是不一样的;
比如存在三个广播接收器;
1 public class FirstReceiver extends BroadcastReceiver { 2 3 private static final String TAG = "OrderedBroadcast"; 4 5 @Override 6 public void onReceive(Context context, Intent intent) { 7 String msg = intent.getStringExtra("msg"); 8 Log.i(TAG, "FirstReceiver: " + msg); 9 10 Bundle bundle = new Bundle(); 11 bundle.putString("msg", msg + "@FirstReceiver"); 12 setResultExtras(bundle); 13 } 14 15 }
1 public class SecondReceiver extends BroadcastReceiver { 2 3 private static final String TAG = "OrderedBroadcast"; 4 5 @Override 6 public void onReceive(Context context, Intent intent) { 7 String msg = getResultExtras(true).getString("msg"); 8 Log.i(TAG, "SecondReceiver: " + msg); 9 10 Bundle bundle = new Bundle(); 11 bundle.putString("msg", msg + "@SecondReceiver"); 12 setResultExtras(bundle); 13 } 14 15 }
1 public class ThirdReceiver extends BroadcastReceiver { 2 3 private static final String TAG = "OrderedBroadcast"; 4 5 @Override 6 public void onReceive(Context context, Intent intent) { 7 String msg = getResultExtras(true).getString("msg"); 8 Log.i(TAG, "ThirdReceiver: " + msg); 9 } 10 11 }
在FirstReceiver和SecondReceiver中最后都使用了setResultExtras方法将一个Bundle对象设置为结果集对象,传递到下一个接收者那里,这样以来,优先级低的接收者可以用getResultExtras获取到最新的经过处理的信息集合。
这三个接收者的<intent-filter>需要多了一个android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。优先级越高,接收广播越早;
同时我们也需要发送有序广播,调用sendOderedBroadcast方法;这个方法有两个参数,分别为intent和string,其中string为权限;当传入null时表示我们不需要权限;
比如我们可以在manifest中定义自己的权限;
<permission android:protectionLevel="normal"
android:name="scott.permission.MY_BROADCAST_PERMISSION" />
normal代表权限的类型;name就是权限的名字啦;
当我们广播设置了这条权限时,我们的广播接收器就需要声明权限;
<uses-permission android:name="scott.permission.MY_BROADCAST_PERMISSION" />
当我们的广播接收器接收广播时就可以终止广播了,在onreceive中调用abortBroadcast就可以取消这条广播的向下传递;
<参考学习自:http://blog.csdn.net/liuhe688/article/details/6955668>
标签:
原文地址:http://www.cnblogs.com/dlut-li/p/5374404.html