android开发之broadcast学习笔记
android中的广播用的太多了,今天稍微总结一下。
按注册方式分为两种:
1.静态注册广播:
静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示“静态”二字。
先看看广播接受者:
public class MyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"静态", Toast.LENGTH_LONG).show();
}
}
清单文件中注册:
<receiver android:name="com.example.staticbroadcast.MyBroadcast" >
<intent-filter>
<action android:name="com.test.StaticBroadcast" />
</intent-filter>
</receiver>
activity中的点击事件(发送广播):
this.static_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.test.StaticBroadcast");
sendBroadcast(intent);
}
});
2.动态注册。
动态注册一般是在activity中的onStart()方法中注册,在onStop()方法中解除注册,代码如下:
public class MainActivity extends Activity {
private Button static_btn;
private Button dynamic_btn;
private BroadcastReceiver myBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.static_btn = (Button) this.findViewById(R.id.button1);
this.dynamic_btn = (Button) this.findViewById(R.id.Button01);
myBroadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this,"你好,这里是动态广播!", Toast.LENGTH_LONG).show();
}
};
// this.static_btn.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// Intent intent = new Intent();
// intent.setAction("com.test.StaticBroadcast");
// sendBroadcast(intent);
// }
// });
this.dynamic_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//发送广播
Intent intent = new Intent();
intent.setAction("DynamicBroadcast");
sendBroadcast(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
//注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("DynamicBroadcast");
registerReceiver(myBroadcastReceiver, intentFilter);
}
@Override
protected void onStop() {
super.onStop();
//取消注册
unregisterReceiver(myBroadcastReceiver);
}
}
关于静态注册的细节:
android:exported=”true”这个属性表示该广播接收器是否接收来自其他App发出的广播,如果有intent-filter属性,则默认为true,否则默认为false。
每个广播接收者都可以接受多个广播源,如果是静态注册,那么你要这么做:
<receiver
android:exported="true"
android:name="com.example.staticbroadcast.MyBroadcast" >
<intent-filter>
<action android:name="com.test.StaticBroadcast" />
<action android:name="com.test.StaticBroadcast2"/>
</intent-filter>
</receiver>
在广播接收器中这样处理:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.test.StaticBroadcast")) {
Toast.makeText(context, "静态", Toast.LENGTH_SHORT).show();
} else if (intent.getAction().equals("com.test.StaticBroadcast2")) {
Toast.makeText(context, "静态2", Toast.LENGTH_SHORT).show();
}
}
如果是动态注册,注册方式如下:
@Override
protected void onStart() {
super.onStart();
//注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("DynamicBroadcast");
intentFilter.addAction("DynamicBroadcast2");
registerReceiver(myBroadcastReceiver, intentFilter);
}
广播接收器中的处理方式与静态注册一致。
关于怎样使用broadcast实现activity和fragment之间的通信可以查看我的另一篇博客使用Broadcast实现android组件之间的通信
android开发之broadcast学习笔记的更多相关文章
- android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏
android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一 ...
- android开发之Notification学习笔记
今天总结了一下Notification的使用,与大家分享一下. MainActivity.java: 本文参考:http://www.jb51.net/article/36567.htm,http:/ ...
- IOS开发之Swift学习笔记
1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
- Android开发之旅4:应用程序基础及组件
引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
随机推荐
- 最近i学习微信卡券中的会员卡功能,弄清楚不容易 ,分享一下。
创建会员卡接口 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283 [4.1 创建会员卡接口] { " ...
- Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?
Windows:图形化用户界面 Unix.Linux:独立的环境.
- Mac Webview OC与JS交互实现
1.首先,需要定义一个JS可识别的变量(如external)用于OC与JS交互 - (void)webView:(WebView *)sender didClearWindowObject:(WebS ...
- Mysql锁机制--读锁
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 1.1.1 建立 Employee表 DROP TABLE IF EXISTS employee; CREATE ...
- java如何获得数据库表中各字段的字段名
public class TestDemo { public static Connection getConnection() { Connection conn = null; try { Cla ...
- 0. 迷之 -> 和 .
0. 迷之 -> 和 . 箭头(->):左边必须为指针: 点号(.):左边必须为实体. e.g.1 class class A{ public: play(); }; int main() ...
- Oracle中备份用户对象的两种方法
方法1: 执行步骤: exp userid=用户名/密码@数据库名 file=c:\emp.dmp 使用当前用户导出 exp userid=sys/sys@数据库名 file=c:\emp.dmp o ...
- python学习之路web框架
WEB框架的本质 python的WEB框架分为两大类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理 ...
- JavaScript原型与原型链
一.数据类型 JavaScript的数据类型可以分为基本数据类型和引用数据类型. 基本数据类型(6种) String Number Boolean null undefined Symbol(ES6) ...
- 干货!一次kafka卡顿事故排查过程
由于一次功能上线后,导致某数据量急剧下滑,给我们紧张的呢!排查过程也是个学习过程(这其中有大部分是领导们的功劳,不过分享给大家应该也不犯法吧,ᐓ) 1. 确认问题的真实性? 被数据部门告知,某数据量下 ...