zoukankan      html  css  js  c++  java
  • Android BroadcastReceiver 发送有序广播

    普通广播(Normal Broadcast):

    一,优缺点:和有序广播的优缺点相反!

    二,发送广播的方法:sendBroadcast()

    有序广播(Ordered Broadcast):

    一,优缺点

    优点:1,按优先级的不同,优先Receiver可对数据进行处理,并传给下一个Receiver

                 2,通过abortBroadcast可终止广播的传播  

    缺点:效率低  

    二,发送广播的方法:sendOrderedBroadcast()   

    三,优先接收到Broadcast的Receiver可通过setResultExtras(Bundle)方法将处理结果存入Broadcast中,

    下一个Receiver 通过 Bundle bundle=getResultExtras(true)方法获取上一个 Receiver传来的数据   

    程序效果:点击按钮,两个Receiver接收同一条广播,在logcat中打印出数据(按照Receiver的优先顺序,Receiver2先,Receiver1后)      

    Manifest

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.song"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:label="@string/app_name"
                android:name=".C48_BroadcastActivity" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <!--优先级的设定 MyReceiver2大于MyReceiver1,优先级的范围-1000~1000 -->
            </activity>
            <receiver android:name=".MyReceiver1">
                <intent-filter android:priority="200">
                    <action android:name="com.song.123"/>
                </intent-filter>
            </receiver>
            <receiver android:name=".MyReceiver2">
                <intent-filter android:priority="1000">
                    <action android:name="com.song.123"/>
                </intent-filter>
            </receiver>
        </application>
    
    </manifest>

    主Activity

    package com.song;
    //发送广播,bundle绑上key为a的数据
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class C48_BroadcastActivity extends Activity {
        /** Called when the activity is first created. */
        Button button;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            button=(Button)findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent=new Intent("com.song.123");
                    Bundle bundle=new Bundle();
                    bundle.putString("a", "aaa");
                    intent.putExtras(bundle);
                    //有序广播
                    sendOrderedBroadcast(intent, null);
                }
            });
            
        }
    }

    Receiver2

    package com.song;
    //优先接到广播,bundle绑上key为b的数据
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    
    public class MyReceiver2 extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            System.out.println("receiver2");
    //        context.getSystemService(name);
            Bundle bundle=intent.getExtras();
            bundle.putString("b", "bbb");
            System.out.println("a="+bundle.get("a"));
            setResultExtras(bundle);
            //切断广播
    //        abortBroadcast();
        }
    
    }

    Receiver1

    package com.song;
    //接收从receiver2传来的广播,包含key为a和b的数据
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    
    public class MyReceiver1 extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            System.out.println("receiver1");
            //要不要接受上一个广播接收器receiver2传来的的数据
            Bundle bundle=getResultExtras(true);
            System.out.println("a="+bundle.getString("a")+",b="+bundle.getString("b"));
        }
    
    }

    程序效果

  • 相关阅读:
    Confluence 6 创建你的个人空间
    Win10正式专业版激活方法
    还在手工写接口测试文档,已经out了
    MYSQL支持的数据类型-数值类型
    mysql
    转 聊聊连接池和线程
    当压测数据压不上去时可能是哪些原因造成的
    IDEA自动导包(全局设置)
    微服务化后缓存怎么做
    win10家庭版升级到专业版密钥
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7603073.html
Copyright © 2011-2022 走看看