• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中BroadcastReceiver组件详解

Android中BroadcastReceiver组件详解

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了broadcastreceiver,android四大组件详解,android四大组件,android组件,android 组件化开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中BroadcastReceiver组件详解


Android系统的4个组件终于还剩一种组件了BroadcastReceiver,这个组件是全局监听器,可以监听系统全局的广播消息,可以方便的实现系统中不同组件之间的通信

BroadcastReceiver有自己的进程,系统级监听器,只要存在与之匹配的Intent被广播出来,BroadcastReceiver就会被激发要创建自己的BroadcastReceiver对象,我们需要继承android.content.BroadcastReceiver,并实现其onReceive方法

MyReceiver.java

public class MyReceiver extends BroadcastReceiver
{
	@Override
	public void onReceive(Context context, Intent intent)
	{
		Toast.makeText(context,
			"接收到的Intent的Action为:" + intent.getAction() 
			+ "\n消息内容是:" + intent.getStringExtra("msg")
			, Toast.LENGTH_LONG).show();
	}
}
Manifest.xml清单文件配置的receiver

	
		
			
就是说无论哪个组件中,intent的Action是"org.crazyit.action.CRAZY_BROADCAST" 并使用使用sendBroadcast(intent)发出广播,那么MyReceiver就会被启动
public class BroadcastMain extends Activity
{
	Button send;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取程序界面中的按钮
		send = (Button) findViewById(R.id.send);
		send.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// 创建Intent对象
				Intent intent = new Intent();
				// 设置Intent的Action属性
				intent.setAction("org.crazyit.action.CRAZY_BROADCAST");
				intent.putExtra("msg", "简单的消息");
				// 发送广播
				sendBroadcast(intent);
			}
		});
	}
}

注册Receiver有两种方法:

静态注册

静态注册是在AndroidManifest.xml文件中配置的,我们就来为MyReceiver注册一个广播地址:

  
              
                  
                  
              
         
配置了以上信息之后,只要是android.intent.action.MY_BROADCAST这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。

动态注册

动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,下面我们就来看一下注册的代码:

MyReceiver receiver = new MyReceiver();  
          
IntentFilter filter = new IntentFilter();  
filter.addAction("android.intent.action.MY_BROADCAST");  
          
registerReceiver(receiver, filter); //注册
receiver 和filter

 


普通广播

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。上面的例子就是发送的普通广播

有序广播

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。

例如:优先级A>B>C,Broadcast先传给A,再传给B,在传给C。优先级别声明元素的android:priority中,数越大级别越高,取值范围在-1000~1000

优先收到Broadcast的接受者可以通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传给下一个接受者,通过Bundle bunde=getResultExtras(true)柯获得上一个接受者存入的数据

public class SortedBroadcast extends Activity
{
	Button send;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取程序中的send按钮
		send = (Button) findViewById(R.id.send);
		send.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// 创建Intent对象
				Intent intent = new Intent();
				intent.setAction("org.crazyit.action.CRAZY_BROADCAST");
				intent.putExtra("msg", "简单的消息");
				// 发送有序广播
				sendOrderedBroadcast(intent, null);
			}
		});
	}
}
MyReceiver.java
public class MyReceiver extends BroadcastReceiver
{
	@Override
	public void onReceive(Context context, Intent intent)
	{
		Toast.makeText(context,	"接收到的Intent的Action为:" 
			+ intent.getAction() + "\n消息内容是:"
			+ intent.getStringExtra("msg")
			, Toast.LENGTH_LONG).show();
		// 创建一个Bundle对象,并存入数据
		Bundle bundle = new Bundle();
		bundle.putString("first", "第一个BroadcastReceiver存入的消息");
		// 将bundle放入结果中
		setResultExtras(bundle);
		// 取消Broadcast的继续传播
		// abortBroadcast(); //①
	}
}
MyReceiver2.java
public class MyReceiver2 extends BroadcastReceiver
{
	@Override
	public void onReceive(Context context, Intent intent)
	{
		Bundle bundle = getResultExtras(true);
		// 解析前一个BroadcastReceiver所存入的key为first的消息
		String first = bundle.getString("first");
		Toast.makeText(context, "第一个Broadcast存入的消息为:" 
			+ first, Toast.LENGTH_LONG).show();
	}
}
清单文件

			
				
					
		
		
			
				
					
			

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android深入四大组件(四)广播的注册、发送和接收过程
  • 4.3.1 BroadcastReceiver牛刀小试
  • Android中BroadcastReceiver的两种注册方式(静态和动态)详解,broadcastreceiver
  • Android-BroadcastReceiver详解
  • BroadcastReceiver--Android广播机制,broadcastreceiver
  • 解析BroadcastReceiver之你需要了解的一些东东,broadcastreceiver
  • Android--BroadcastReceiver应用详解
  • Android四大组件之BroadcastReceiver
  • Android:广播接收器(BroadCastReceiver)要点随笔。,
  • Android中BroadcastReceiver组件详解

相关文章

  • 2017-05-26【转载】ReactiveX 的理念和特点,转载reactivex理念
  • 2017-05-26android:webview实现简单的浏览器
  • 2017-05-26android:自定义HorizontalScrollView实现qq侧滑菜单
  • 2017-05-26Android 开源库和项目 3,android开源库项目
  • 2017-05-26android:Activity启动模式之singleTop
  • 2017-05-26Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束,androidsvn
  • 2017-05-26Fragment分解使用,fragment分解
  • 2017-05-26android工程师这么面试就能拿高薪,android高薪
  • 2017-05-26Android之Activity系列总结(一)--Activity概览,android--activity
  • 2017-05-26玩转Android---事件监听篇---第2篇,android---第2篇

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android进程通信之两种序列化方式分析
    • Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
    • android样式和主题(一),android样式主题
    • Android4.4访问外部存储,android4.4访问存储
    • android:Activity数据传递之对象(Serializable)
    • Android中如何修改编译的资源ID值(默认值是0x7F...可以随意改成0x02~0x7E)
    • Android Studio第一次提交git使用,androidgit
    • TODO的使用以及自定义
    • Glide的常用方法注释,Glide常用方法注释
    • Android系统架构,android系统结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有