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, ...
随机推荐
- C#模拟按键
try { System.Threading.Thread.Sleep(); ; i < ; i++) { SendKeys.SendWait("{ENTER}"); Sen ...
- 优动漫PAINT(clip studio paint)怎么画一幅水墨竹子图
今天小编分享使用优动漫PAINT绘制一个水墨竹子教程,绘画的过程中我只用到了两个笔刷,即钢笔模式下的“美术字”和“效果线专用”,并且全程鼠标绘制哦,所以生疏的笔触效果大家见谅,没有数位板的小伙伴不妨试 ...
- Exact Change FreeCodeCamp
function checkCashRegister(price, cash, cid) { var change; var sumCid = 0; // Here is your change, m ...
- 获取Centos7安装Docker各种姿势(指定版本)(转载)
Centos7安装docker社区(CE)版 官网指导:https://docs.docker.com/engine/installation/linux/docker-ce/centos/#inst ...
- 浅谈[^>]在正则中的2种用法
/^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A,此时^A的意思是“匹配开头的A” /[^a-z\s]/会匹配"my 3 sister ...
- 面试题1-----SVM和LR的异同
1.异(加下划线是工程上的不同) (1)两者损失函数不一样 (2)LR无约束.SVM有约束 (3)SVM仅考虑支持向量. (4)LR的可解释性更强,SVM先投影到更高维分类再投影到低维空间. (5)S ...
- 关于linux系统的sendmail使用中的问题与解决
系统环境是ubuntu16.04 安装 sudo apt-get install sendmail 检查运行情况 sudo service sendmail status 结果如下,表示正在运行 ● ...
- nyoj124-中位数
中位数 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 一组数据按从小到大的顺序依次排列,处在中间位置的一个数叫做中位数. 比如 1 5 10 11 9 其中位数就是9 ...
- Code VS 1002 搭桥
题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...
- 简述JVM、JRE、JDK的关系及作用
1.JVM:java虚拟机 . 作用:保证java语言跨平台. 2.JRE:java运行环境 jre=java虚拟机+核心类库. 作用:java程序的运行环境. 3.JDK :java开发工具集.JD ...