码迷,mamicode.com
首页 > 移动开发 > 详细

android的BroadcastRecevier的用法;

时间:2016-04-10 17:58:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

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>

 

android的BroadcastRecevier的用法;

标签:

原文地址:http://www.cnblogs.com/dlut-li/p/5374404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!