0  简介

       BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的
广播。
       在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播
就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提
示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户
及时保存进度,等等。
       Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告
知自己就可以了,大大减少了开发的工作量和开发周期。

1  普通广播

       普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之
间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
动态接收器高优先级 > 动态接收器低优先级 > 静态接收器高优先级 > 静态接收器低优先级
 

1.1 自定义广播 MyReceiver.java

package com.broadcastreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO 自动生成的方法存根
Toast.makeText(context, intent.getAction()+intent.getStringExtra("message"), Toast.LENGTH_SHORT).show();
}
}

1.2 注册广播

<receiver android:name="com.broadcastreceiver.MyReceiver">
<intent-filter >
<action android:name="michael.FIRSTRECEIVER"/>
</intent-filter>
</receiver>

1.3 发送广播

package com.broadcastreceiver;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn_send=(Button)findViewById(R.id.btn_send);
btn_send.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("michael.FIRSTRECEIVER");
intent.putExtra("message", "我是神奇的广播消息!");
sendBroadcast(intent);
}
});
}
}

2  有序广播

       有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低
的接收者那里,优先级高的接收者有能力终止这个广播
如果静态接收器的优先级高于动态接收器的优先级,那么还是静态接收器先接收到广播(比如接收短信)
 

2.1 在前一节的基础上再新建个 广播 YourReceiver.java

package com.broadcastreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
public class YourReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle=getResultExtras(true);
String first=bundle.getString("first");
Toast.makeText(context, "上一个接收器转播的数据为:"+first, Toast.LENGTH_LONG).show();
}
}

   
2.2 代码注册广播

package com.broadcastreceiver;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
YourReceiver yourreceiver=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); yourreceiver=new YourReceiver();
Button btn_send=(Button)findViewById(R.id.btn_send);
btn_send.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("michael.FIRSTRECEIVER");
intent.putExtra("message", "我是神奇的广播消息!");
sendBroadcast(intent);
}
}); //代码动态注册广播
IntentFilter filter=new IntentFilter();
filter.addAction("michael.FIRSTRECEIVER");
filter.setPriority(10);
registerReceiver(yourreceiver, filter);
}
@Override
protected void onDestroy() {
//程序退出前取消注册广播
unregisterReceiver(yourreceiver);
super.onDestroy();
}
}

广播的发送不局限于当前应用程序,其它程序发送广播的话也可接收到。

2.3  接收优先级

       静态接收器优先级低于动态接收器,也就是说,无论多么高级别的静态接收器和多么低级别的动态接收器都
接收同一广播,永远都是动态接收器先接收到(相对于普通广播)
       动态接收器也可以设置优先级,高优先级的接收器会在低优先级的接收器之前接收到广播,同样优先级的动
态接收器,谁先注册到系统,谁就抢先接收到广播。
 
举例:
假设有如下优先级的5个接收器
1.动态A(优先级=1)
2.动态B(优先级=2)
3.动态C(优先级=2)
4.静态D(优先级=1)
5.静态E(优先级=2)并且B先于C注册
 
普通广播接收的顺序
B C A E D    (动态接收器高优先级 > 动态接收器低优先级 > 静态接收器高优先级 > 静态接收器低优先级 )
有序广播接收的顺序
B C E A D    (如果静态接收器的优先级高于动态接收器的优先级,那么还是静态接收器先接收到广播)
 

这是在一片博客上看到的图,忘记原创地址了,罪过啊

 
 
 
 
 
 注:转载请注明出处 :)   毕竟代码是一个一个敲出来的啊,O(∩_∩)O~
 
 
 
 
 
 
 

Android 四大组件之 BroadcastReceiver的更多相关文章

  1. [置顶] Android四大组件之BroadcastReceiver

    Android四大组件之BroadcastReceiver Broadcast Receiver 广播接收器,是一种负责接收广播消息并对消息做出响应的组件,和Service一样并不提供与用户交互的UI ...

  2. Android 四大组件之“ BroadcastReceiver ”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  3. Android四大组件:BroadcastReceiver 介绍

    介绍 BroadcastReceiver 即广播组件,是 Android 的四大组件之一.用于监听和接收广播消息,并做出响应.有以下一些应用: 不同组件之间的通信(应用内或不同应用之间). 多线程之间 ...

  4. Android四大组件之BroadcastReceiver

    什么是BroadcastReceiver? BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播. 在Android系统中,广播体现在方方面面, ...

  5. Android四大组件之—— BroadcastReceiver的使用

    BroadcastReceiver又名广播接收者.既然它用于接收广播,那一定就有人负责发送. Android系统中的广播: 在现实生活中,我们都知道广播是什么,用来做什么.例如公园里的广播,主要通知游 ...

  6. Android四大组件之一“广播”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  7. Android 四大组件之" ContentProvider "

    前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...

  8. 【Android开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver

    广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都 ...

  9. Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

    Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他 ...

随机推荐

  1. FZU 2102 Solve equation(水,进制转化)&& FZU 2111(贪心,交换使数字最小)

    C Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pra ...

  2. [转]Laravel 4之数据库操作

    Laravel 4之数据库操作 http://dingjiannan.com/2013/laravel-database/ 数据库配置 Laravel数据库配置在app/config/database ...

  3. ios 自己定义导航栏和切割线

    自己定义导航栏: // CustomNaviBarView.h #import <UIKit/UIKit.h> @interface CustomNaviBarView : UIView ...

  4. html_day4+css

    表单控件共有的属性: enabled:表示表单控件可用 disabled:表示表单控件被禁用 readonly:表示表单控件只能读name属性值的作用: 需要将表单的数据提交到服务器处理就要写name ...

  5. Js异步级联选择框实践方法

    HTML: <li> <span>所在地区:</span> <select name="prov" id="ddl_prov&q ...

  6. 引用System.Runtime.Serialization.Json

    vs2012下,重新添加一次System.Runtime.Serialization的引用

  7. 网页body中background在ie中显示不出来

    网页body中background在ie中显示不出来 | 浏览:349 | 更新:2014-03-11 14:03 刚才上班在公司网站上写一个页面,在谷歌浏览器,火狐浏览器里调试完后,一切正常,忽然想 ...

  8. Glide的加载图片的帮助类,用来把图片圆角或者改成圆形图片

    Glide虽然非常好用但是没找到把图片圆角的方法,所以百度了一个非常不错的加载类自己实现圆角图 感谢原文章作者:http://blog.csdn.net/weidongjian/article/det ...

  9. iOS_ @property参数分析

    @propert的相关参数 因为现在Xcode都是默认使用ARC所以现在分析主要是以ARC为主. 1.@property有哪些参数? 第一组: 内存管理特性 retain  assign  copy ...

  10. 在shell脚本中调用sqlplus

    #!/bin/bash sqlplus dc_file_data_js/dc_file_data_js << EOF1 set linesize 500; set pagesize 100 ...