
AndroID中的广播用的太多了,今天稍微总结一下。
按注册方式分为两种:
1.静态注册广播:
静态注册广播就是在androIDManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播d出一个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组件之间的通信
原文地址:http://blog.csdn.net/u012702547/article/details/46955787
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android基础知识之broadcast广播详解全部内容,希望文章能够帮你解决Android基础知识之broadcast广播详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)