发送有序广播Ordered Broadcast

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>

时间: 2024-12-21 09:21:17

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

Ordered Broadcast有序广播

sendBroadcast()发生无序广播 sendOrderedBroadcast()发送有序广播 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&quo

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

?? 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广

广播接收者--Broadcast

什么是Broadcast BroadcastReceiver是安卓中的四大组件之一. 广播接收器,也被称为全局事件,或系统事件. 当Android系统中任何程序有动作时,如果想通知其他程序,采用广播的方式进行传播是非常有效的.广播从理论上说,可以将一个动作传播给任意多个程序(当然,广播接收器的数量会受到系统限制). 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.

广播接收者BroadCast的认识

BroadCast用于接收其他程序或者本身发出的系统级别的通知 分为标准广播和有序广播 又分为动态注册和静态注册 动态注册: 首先新建一个类用于接收广播(即广播接收者)的类,该类继承BroadCatReceiver类,并且重写onReceiver方法,收到广播后的各种逻辑就是在该方法里面编写,在onCreate()方法里面回去IntentFilter实例,并且添加广播的指令,然后获取BroadCastReciver类的实例,然后利用registerReciver()方法进行广播的注册, @Ove

Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

BroadcastReceiver普通广播.有序广播.拦截广播.本地广播.Sticky广播.系统广播 本篇文章包括以下内容: 前言 BroadcastReceiver的简介 普通广播(自定义广播) 有序广播 拦截广播 本地广播 Sticky广播 系统广播 部分源码下载 前言 又是一篇基础总结性的文章来啦,个人强迫症犯了,非得把博客的四大组件模块给补齐了,总结了一下BoradcastReceiver的各种使用,废话不多说,开车啦.博主建议自己敲一遍代码来理解广播,因为里面有很多细节的东西需要注意,

旺仔:有序广播

package com.example.administrator.test.Fragment.Broadcast; import android.content.Intent; import android.content.IntentFilter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.

广播接收者(Broadcast Receiver)

独立寒秋,湘江北去,橘子洲头. -–毛泽东<沁园春·长沙> 广播 广播类型 有序广播 无序广播 特殊的广播接收者 注册广播接收者的两种方式 系统广播示例 接收系统发送的广播 示例-短信到来 自定义无序广播示例 创建广播 接收广播方式静态注册 接收广播方式代码注册 自定义有序广播示例 发送有序广播 接收有序广播 有序广播结果 特殊的广播接收者-锁屏等等 广播 听广播要有:电台 收音机 音乐广播 Android系统内部已经定义好了电台 ,也已经定义好了一些广播事件 比如外拨电话 短信到来 SD卡状

android#boardcast#发送自定义广播

广播主要分为两种类型,标准广播和有序广播,通过实践的方式来看下这两种广播具体的区别. 一.发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发出去也是白发.因此新建一个MyBroadcastReceiver继承自BroadcastReceiver,代码如下所示: public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Contex

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

* 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者安装以后必须手动启动一次,否则不生效 * 4.0以后广播接收者如果被手动关闭,就不会再启动了 ------------------------------------------------------------------------ #监听SD卡状态 * 清单文件中定义广播接收者接收的类型,监听SD卡常