Broadcast Receiver广播接收器
1.概述
广播接收器不仅能接受来自系统的内容,也可以接受来自其他app的内容。广播分为标准广播和有序广播。
2.标准广播
一种完全异步执行的广播,在广播发出之后几乎所有的广播接收器都在同一时刻接受到广播信息。没有任何顺序可言。但这种广播无法被拦截。
基本的使用:重写onReceiver
public class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String s=intent.getStringExtra("key");
Toast.makeText(context,s+"--1",Toast.LENGTH_SHORT).show();
}
}
<receiver android:name=".MyBroadcastReceiver">
<!-- 指定能够接收的广播类型 -->
<intent-filter >
<action android:name="aaaa" />
</intent-filter>
</receiver>
Intent intent=new Intent();
intent.setAction("aaaa");
intent.putExtra("key","输入的value");
/**
* 发送普通广播
*/
MainActivity.this.sendBroadcast(intent);
3.有序广播
一种同步执行的广播,在广播发送出后,同一时刻只能有一个广播接收器能够收到这个广播,当这个广播接收器中的逻辑处理完毕后才会继续传递。优先级高德接收器先接收到广播,且前面的广播接收器还可以拦截广播,这样后面的广播接收器就接受不到广播了。(优先级相同时,按照注册次序接收广播)
优先级取值: -1000~1000(优先级低-->高)
示例:
注册2个广播接收器:
<receiver android:name=".MyBroadcastReceiver">
<!-- 指定能够接收的广播类型 -->
<intent-filter android:priority="50">
<action android:name="aaaa" />
</intent-filter>
</receiver>
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="aaaa"/>
</intent-filter>
</receiver>
public class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String s=intent.getStringExtra("key");
Toast.makeText(context,s+"--1",Toast.LENGTH_SHORT).show();
}
}
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String s=intent.getStringExtra("key");
Toast.makeText(context,s+"---2",Toast.LENGTH_SHORT).show();
/**
* 中断,只对有序广播起作用
*/
abortBroadcast();
}
}
Intent intent=new Intent();
intent.setAction("aaaa");
intent.putExtra("key","输入的value"); /**
* 发送有序广播
*/ sendOrderedBroadcast(intent, null);
如上,发送广播,只会执行 Toast.makeText(context,s+"---2",Toast.LENGTH_SHORT).show();
4.广播的动态注册:
上面在Xml配置文件中配置为静态注册,那么动态注册广播代码如下:
IntentFilter intentFilter;
MyReceiver myReceiver;
myReceiver=new MyReceiver();
intentFilter=new IntentFilter();
intentFilter.addAction("aaaa");
/**
* 设置优先级
*/
intentFilter.setPriority(100);
registerReceiver(myReceiver,intentFilter);
5.本地广播
为了解决广播的安全性问题,Adnroid引入了一套本地广播机制。使用这个机制发出的广播只能在应用程序内部使用,并且广播接收器也只能接受本地发出的广播。主要的使用是引入了一个loaclBroadcastManager对广播进行管理。
public class MainActivity extends AppCompatActivity {
Button btn;
IntentFilter intentFilter;
LocalReceiver localReceiver;
LocalBroadcastManager localBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager=LocalBroadcastManager.getInstance(this);
/**
* 注册本地广播
*/
localReceiver=new LocalReceiver();
intentFilter=new IntentFilter();
intentFilter.addAction("aaaa");
localBroadcastManager.registerReceiver(localReceiver,intentFilter);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("aaaa");
intent.putExtra("key","输入的value");
localBroadcastManager.sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver);
}
class LocalReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String s=intent.getStringExtra("key");
Toast.makeText(context,s+"***",Toast.LENGTH_SHORT).show();
}
}
}
Broadcast Receiver广播接收器的更多相关文章
- Android面试收集录2 Broadcast Receiver详解
1.Broadcast Receiver广播接收器简单介绍 1.1.定义 Broadcast Receiver(广播接收器),属于Android四大组件之一 在Android开发中,Broadcast ...
- Android笔记(五):广播接收者(Broadcast Receiver)
Android有四大组件,分别为:Activity(活动).Service(服务).Content Provider(内容提供器).Broadcast Receiver(广播接收者). 引入广播的目的 ...
- Android中Intent具体解释(二)之使用Intent广播事件及Broadcast Receiver简单介绍
通过第一篇的解说,我们已经看到了怎样使用Intent来启动新的应用程序组件,可是实际上他们也能够使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Inten ...
- 广播Broadcast Receiver
广播的类型: 1.标准广播(Normal broadcat) 完全异步执行的广播,所有广播接收器同一时间接收广播消息. 效率高,但无法被截断. 2.有序广播 同步执行的广播,同一时刻只能有一个广播接收 ...
- Android广播接收器Broadcast Receiver-android学习之旅(十二)
首先继承BroadcastReceiver类,并在manifest中注册 public class MyReceiver extends BroadcastReceiver { public MyRe ...
- BroadCast Receiver的使用
定义 广播接收器分为标准广播和有序广播,标准广播是异步执行的广播,有序广播是同步执行的,同一时刻只有一个广播接收器会收到广播,执行结束后,广播才会继续传递. 静态注册 在Androidmanifest ...
- 第九章:四大组件之Broadcast Receiver
第九章:四大组件之Broadcast Receiver 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和 ...
- Android Broadcast Receiver 使用入门
Broadcast Receiver 的使用 1.Broadcast Receiver简介 2.Broadcast Receiver接收系统自带的广播 3.自 ...
- Android基础总结(4)——广播接收器
在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的.Android提供了一整套完整的API, ...
随机推荐
- Qt5.2 for Android 配置及部署到手机运行
使用DNK编程也没有那么难,使用QT为安卓跨平台编程需要安装NDK,SDK通过NDK调用C++程序,偶尔能提高一些效率. SDK下载地址:http://developer.android.com/sd ...
- Windows负载机JVM 远程监控Linux服务器下tomcat
基本是跟着网上的操作进行的,除了遇到一个Local host name unknown的问题: 一.Linux服务器操作部分 服务器地址:10.64.111.68 首先配置JMX: 1.找到jdk目录 ...
- win7/win10 未分配磁盘怎样创建扩展分区 也就是逻辑分区(转截)
我们有时候用windows7的磁盘管理工具对windows7系统分区管理的时候,我们可能会不小心把我们的电脑硬盘扩展分区都删除了,扩展分区变为了未分配的空间,这时候如果我们新建分区的话,建立的都是主分 ...
- 4056 hdu4866 Shooting
题目描述 In the shooting game, the player can choose to stand in the position of [1, X] to shoot, you ca ...
- 元素隐藏的方式之--hidden,display,visibility
<html lang="en"> <head> <meta charset="UTF-8"> <title>标签 ...
- tsar源码分析
从modules/mod_cpu.c入手 ./devel/tsar.h module 结构体: struct module { char name[LEN_32]; char opt_line[LEN ...
- C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...
- matplotlib 显示两张图片,折线图 和 scipy
显示两张图片的代码: import numpy as np from scipy.misc import imread, imsave, imresize import matplotlib.pypl ...
- 《你又怎么了我错了行了吧》【Alpha】Scrum meeting 3
第三天 日期:2019/6/16 前言: 第3次会议在女生宿舍召开 讨论了项目功能改进问题,继续代码完善和安排 1.1 今日完成任务情况以及明天任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 对已 ...
- 性能测试之Jforum平台的搭建
学习Jmeter性能基础,想要借助1款现有的软件平台,来练习jmeter基础,<Jmeter实战>书籍上给出样例软件平台:Jforum 一.环境准备 准备:tomcat9.mysql5.5 ...