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, ...
随机推荐
- Java的编译与运行
编译: 是指将我们编写的Java源文件翻译成JVM认识的 .class 文件, 在这个过程中,javac 编译器会检查我们所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功. 运行: ...
- Windows自调试Redis
一.安装Redis 1. Redis官网下载地址:http://redis.io/download,下载相应版本的Redis,在运行中输入cmd,然后把目录指向解压的Redis目录. 2.启动服务命令 ...
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)-转帖篇
原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...
- XSS Chanllenges 1-5
XSS Chanllenges XSS Chanllenges 是一个XSS的练习平台,可以借助这个平台练习各种绕过,以及手工进行XSS的学习 平台链接:https://xss-quiz.int21h ...
- groupadd(创建组)重要参数介绍
-g :值定用户组GID值.除非接 -o 参数(如:groupadd -g 666 -o oldboy),否则ID值必须是唯一的数字(不能为负数). 如果不指定 -g 参数,则默认从500开始
- HDU——T1231 最大连续子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1231 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连 ...
- hrift does not support polymorphic data types
hrift does not support polymorphic data types Exception in thread "main" com.facebook.swif ...
- 使用fatjar来实现将包括第三方jar包的项目到处成一个jar包供其它程序使用
一.在线安装fat jar 在线安装步骤: eclipse菜单条 help >software updates >Search for new features to install> ...
- muduo总结
总结说的有的过大,算是对自己学习的一个总结.兴许会不断补充. 模型总结 muduo是基于非堵塞的IO和事件驱动的网络库. muduo的总体结构时one loop per thread+threadpo ...
- 怎样通过反编译工具与插件 查看java *.class 文件源代码
Java Decompiler[java 反编译]:开发了反编译工具.能够方便查看*.class 文件源代码.以下介绍几种查看源代码的方式:工具&插件 1.JD-GUI JD-GUI 是显示 ...