import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SortedBroadcast extends Activity {
  Button send;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sorted_broadcast);
    //获取程序中的send按钮
    send = (Button) findViewById(R.id.send);
    send.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // 创建Intent对象
        Intent intent = new Intent();
        intent.setAction(broadcasttest.action.CRAZY_BROADCAST");
        intent.putExtra("msg", "简单的消息");
        //发送有序广播
        sendOrderedBroadcast(intent, null);
      }
    });
  }

}

对于有序广播而言,它会按优先级依次触发每个BroadcastReceiver的onReceive()方法。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MyReceiver1 extends BroadcastReceiver{

  @Override
  public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "接收到的Intent的Action为:"+
        intent.getAction()+"\n消息内容是:"+intent.getStringExtra("msg"),
        5000).show();
    //创建一个Bundle对象,并存入数据
    Bundle bundle = new Bundle();
    bundle.putString("first", "第一个BroadcastReceiver存入的信息");
    //将Bundle放入结果中
    setResultExtras(bundle);
    //取消Broadcast的继续传播
    abortBroadcast();
  }

}

上面的BroadcastReceiver不仅处理了它接收到的消息,而且向处理结果中存入了key为first的消息,这个消息将可以被第二个BroadcastReceiver解析出来。,不过最后一行代码用于取消广播,如果保持这条代码生效,那么优先级比MyReceiver1低的BroadcastReceiver都将不会被触发。

在AndroidManifest.xml文件中部署该BroadcastReceiver,并指定其优先级为20,配置片段如下:

<receiver android:name=".MyReceiver1">
  <intent-filter android:priority="20">
    <action android:name="broadcasttest.action.CRAZY_BROADCAST"/>
  </intent-filter>
</receiver>

接下来再为程序提供第二个BroadcastReceiver,这个BroadcastReceiver将会解析前一个BroadcastReceiver所存入的key为first的消息,

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MyReceiver2 extends BroadcastReceiver{

  @Override
  public void onReceive(Context context, Intent intent) {
    Bundle bundle = getResultExtras(true);
    //解析前一个BroadcastReceiver所存入的key为first的消息
    String first = bundle.getString("first");
    Toast.makeText(context, "第一个Broadcast存入的消息为:"+first,5000).show();

  }

}

在AndroidManifest.xml文件中部署该BroadcastReceiver,并指定其优先级为0,配置片段如下:

<receiver android:name=".MyReceiver2">
  <intent-filter android:priority="0">
    <action android:name="broadcasttest.action.CRAZY_BROADCAST"/>
  </intent-filter>
</receiver>

发送有序广播Ordered Broadcast的更多相关文章

  1. Android BroadcastReceiver 发送有序广播

    普通广播(Normal Broadcast): 一,优缺点:和有序广播的优缺点相反! 二,发送广播的方法:sendBroadcast() 有序广播(Ordered Broadcast): 一,优缺点 ...

  2. Ordered Broadcast有序广播

    sendBroadcast()发生无序广播 sendOrderedBroadcast()发送有序广播 activity_main.xml <LinearLayout xmlns:android= ...

  3. 17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

     1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播( ...

  4. Android 发送自定义广播(标准和本地)

    1.首先自定义一个广播接收器:MyBroadcastReceiver package example.com.mybroadcastreceiver; import android.content.B ...

  5. android: 发送自定义广播

    5.3.1    发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...

  6. Android学习总结(六)———— 发送自定义广播

    一.两种广播类型 2.1 标准广播 是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言.这种广播的效率会比较高,但同时也 ...

  7. Android菜鸟的成长笔记(26)——普通广播与有序广播

    BroadcastReceiver是Android系统的四大组件之一,BroadcastReceiver是一个全局的系统级监听器,它拥有自己的独立进程. 我们来写一个最简单的广播接收过程 先在mani ...

  8. android#boardcast#发送自定义广播

    广播主要分为两种类型,标准广播和有序广播,通过实践的方式来看下这两种广播具体的区别. 一.发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发出去也是白发.因此新 ...

  9. android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播

    * 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者 ...

随机推荐

  1. ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程

    题意:给定N(1<= N <=64)个盘子和M(4<= M <= 65)根柱子,问把N个盘子从1号柱子移动到M号柱子所需要的最少步数,并且输出移动过程. 分析:设f[i][j] ...

  2. jQuery中的遍历

    在原生javascript中我们用的最多的遍历就是for,但是在jQuery里面有个方法比for还有强大,它就是我们经常看到的each()方法,当然了如果考虑性能方面的话还是建议用for来进行元素的遍 ...

  3. SAS Annotated Output GLM

    SAS Annotated Output GLM   在使用SAS过程中,proc glm步输出离差平方和有4种算法,分别是SS1 SS2 SS3 SS4 下面文章介绍了其中SS3的具体计算步骤和例子 ...

  4. struts2 if标签示例

    下面总结一下struts2 中if标签的使用 (1)判断字符串是否为空 <s:if test="user.username==null or user.username==''&quo ...

  5. tomcat 启用Gzip 压缩进行优化

    打开conf/server.xml文件可以看到: <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->     <Con ...

  6. 新建我的 第一个maven项目

    maven是管理项目的,myeclipse是编写代码的.第一次写项目都要配置好多东西,很麻烦,now 来看看怎样新建一个maven项目. 百度经验:jingyan.baidu.com 工具/原料   ...

  7. redis web 客户端工具 redis-admin

    redis-admin是基于java的redis web客户端(redis client),以方便广大程序员使用redis为宗旨,集五种数据结构增删改查于一身. https://github.com/ ...

  8. 转:C/C++基本数据类型所占字节数

    参考:http://blog.csdn.net/vast_sea/article/details/8076934 关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多 ...

  9. tinyXml直接解析XML字符串

    一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...

  10. zabbix实现原理及架构详解

    想要用好zabbix进行监控,那么我们首要需要了解下zabbix这个软件的实现原理及它的架构.建议多阅读官方文档. 一.总体上zabbix的整体架构如下图所示: 重要组件说明: 1)zabbix se ...