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, ...
随机推荐
- 六星经典CSAPP笔记系列 - 作者:西代零零发
六星经典CSAPP笔记(1)计算机系统巡游 六星经典CSAPP笔记(2)信息的操作和表示 六星经典CSAPP-笔记(3)程序的机器级表示
- Angular ocLazyLoad 与ui-router的配合使用
1.resolve state(配置路由时)的resolve参数: resolve:object,将会被注入controller去执行的函数,<string,function>形式. 基于 ...
- redis启动出错 Creating Server TCP listening socket 127.0.0.1:6379: bind: No error解决办法
windows下安装Redis第一次启动报错: [2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0.0.1: ...
- Swift - 关键字(typealias、associatedtype)
Typealias typealias 是用来为已经存在的类型重新定义名字的,通过命名,可以使代码变得更加清晰.使用的语法也很简单,使用typealias 关键字像使用普通的赋值语句一样,可以将某个已 ...
- 用apt-get install一个软件的时候出现错误: 无法解析或打开软件包的列表或是状态文件
用apt-get install一个软件的时候出现了一个错误: E: Encountered a section with no Package: header E: Problem with Mer ...
- 《Python数据分析与挖掘实战》-第四章-数据预处理
点我看原版
- keyup.enter.native&click.native.prevent
vue 监听键盘回车事件 @keyup.enter || @keyup.enter.native vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符: <input v-on:keyu ...
- 【codeforces 799A】Carrot Cakes
[题目链接]:http://codeforces.com/contest/799/problem/A [题意] 你有一个烤炉; 每t秒能同时烤出k个蛋糕; 你可以在第一个烤炉在烤的时候;同时花费d秒建 ...
- struts配置问题
- lim的日常生活