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组件之间的通信

本文参考了:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

android开发之broadcast学习笔记的更多相关文章

  1. android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏

    android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一 ...

  2. android开发之Notification学习笔记

    今天总结了一下Notification的使用,与大家分享一下. MainActivity.java: 本文参考:http://www.jb51.net/article/36567.htm,http:/ ...

  3. IOS开发之Swift学习笔记

    1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.

  4. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  7. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  8. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  9. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

随机推荐

  1. hdu 5641 BestCoder Round #75

    King's Phone  Accepts: 310  Submissions: 2980  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  2. hdu 4453 splay

    Looploop Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  3. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

  4. Django中Form的基本使用

    from django import forms from django.forms import fields class UserInfo(forms.Form): username = fiel ...

  5. Linux 基本概念和操作2

    接着上一篇 "Linux 基本概念和操作" 1.删除文件 有时候我们想要删除的文件是只读文件,直接使用rm 文件名,会报错.这时使用" -f " 参数强制删除. ...

  6. Maven之自定义archetype生成项目骨架

    Maven之自定义archetype生成项目骨架(一) http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013

  7. avalon,xmp

  8. 运行eclipse java virtual machine launcher 什么错误

    在MyEclipse的安装目录eclipse有个eclipse.ini文件原来的配置如下:-showsplashcom.genuitec.myeclipse.blue.product.ide--lau ...

  9. 07_Linux目录文件操作命令4解压缩,文件查找_我的Linux之路

    这一节还是一样学习操作目录文件的命令 在这一节,我会讲到解压压缩tar以及zip命令,以及文本查找命令grep tar 打包压缩命令 tar命令可以为linux的文件和目录创建档案 首先要弄清两个概念 ...

  10. ubuntu部署mipsel64交叉编译环境

    最近找到个不错的交叉工具链,据传能够编译mipsel64的程序,决定试试. 首先当然是安装环境: apt install -y gcc libncursesada3-dev 下载,解压,进入 三部曲: ...