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


    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

    版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

  • 相关阅读:
    centos 安装 redis3.2.0 集群
    CentOS7安装配置redis-3.0.0
    CentOS7/RHEL7安装Redis步骤详解
    鸟哥之安裝 CentOS7.x
    Centos 7 学习之静态IP设置
    CentOS7 下linux不能上网解决方法​,centos7 eth0 没有ip,IP突然丢失
    javamail发送邮件(转)
    Apache James使用的方法及相关心得(转)
    Velocity缓存与穿透(转)
    十分钟搞懂什么是CGI(转)
  • 原文地址:https://www.cnblogs.com/lenve/p/4659463.html
Copyright © 2020-2023  润新知