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. 输出sed的重定向

    默认情况下,sed编辑器会将进步的结果输出到STDOUT上,你可以在shll脚本中使用所有重订向sed编辑器输出的标准方法. 你可以在脚本中用反引号来将sed编辑器命令的输出重定向到一个变量中供后面使 ...

  2. javascript中怎么让一个页面执行多个window.onload?

    我们都知道在javascript中window.onload 只能有一个如果有多个的话后面的会覆盖前面的,今天我们来看看怎么让一个页面执行多个window.onload <script type ...

  3. MIRO发票校验BAPI_INCOMINGINVOICE_CREATE (2013-01-23 10:01:29)

    form frm_invoice_create2 .  data: str type string.  data: ls_headerdata       like bapi_incinv_creat ...

  4. JavaScript基于对象(面向对象)<一>类和对象

    javascript中一切皆对象,比如:Array,Date.....这些都是对象.javascript中没有class的定义,function既是定义函数,也可以是定义类.function Obj( ...

  5. poj3304Segments(直线与多条线段相交)

    链接 枚举两点(端点),循环遍历与直线相交的线段. #include <iostream> #include<cstdio> #include<cstring> # ...

  6. 淘宝封装的一款ui 非常不错

    好用的淘宝ui http://m.sui.taobao.org/demos/  手机端访问地址

  7. 【CDN】国外访问国内服务器网站-响应慢-CDN

    建议采用CDN海外加速方式: (1)CDN即内容分发网络(Content Delievery Network),它可以认为是建立在现有IP网络基础结构之上的一种增值网络.CDN技术将多点负载均衡.镜像 ...

  8. 使用DBMS_STATS来收集统计信息【转】

    overview Oracle's cost-based optimizer (COB) uses statistics to calculate the selectivity (the fract ...

  9. Spring Boot 学习

    下载安装了如下软件.设置了环境变量. Groovy-Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码 ...

  10. .NET Reflector 8.2支持VS2013高亮显示和代码地图视图

    Red Gate Software公司最近发布的.NET Reflector 8.2支持Visual Studio 2013,其Reflector 桌面程序能够转换十六进制/十进制值.桌面程序还支持局 ...