在上一篇博客,Android-有序广播是可以中断的,介绍了 有序广播是可以中断的,但还有一种例外情况:明确指定接收者的有序广播是无法中断的,一定会发送到指定的接收者

AndroidManifest.xml形式订阅两个接收者,两个接收者的 action/data一模一样,只是优先级不一样

MyBroadcastReceiver2 优先级 600 会先接收到

MyBroadcastReceiver1 优先级 200 会后接收到

     <!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".br.MyBroadcastReceiver1"> <intent-filter
android:priority="200"> <!-- 设置优先级别为 200 (最大100 / 最小 -1000) -->
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="OOO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver> <!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".br.MyBroadcastReceiver2"> <intent-filter
android:priority="600"> <!-- 设置优先级别为 600 (最大100 / 最小 -1000) -->
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="OOO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver>

MyBroadcastReceiver1

package liudeli.croadcast1.br;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver1 extends BroadcastReceiver { private final String TAG = "MyBroadcastReceiver"; /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "【1111111111】intent.getAction():" + intent.getAction());
Log.d(TAG, "【1111111111】intent.getDataString():" + intent.getDataString()); // 真实开发中是这样写的
if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {
String data = intent.getDataString();
String[] dataArray = data.split(":");
Log.d(TAG, "【1111111111】data:" + dataArray[1]);
Log.d(TAG, "【1111111111】music:" + intent.getStringExtra("music"));
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
}
}
}

MyBroadcastReceiver2 在 onReceive()方法  中断广播 abortBroadcast();

package liudeli.croadcast1.br;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver2 extends BroadcastReceiver { private final String TAG = "MyBroadcastReceiver"; /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(Context context, Intent intent) { /**
* 中断广播
*/
abortBroadcast(); Log.d(TAG, "【222222222】intent.getAction():" + intent.getAction());
Log.d(TAG, "【222222222】intent.getDataString():" + intent.getDataString()); // 真实开发中是这样写的
if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {
String data = intent.getDataString();
String[] dataArray = data.split(":");
Log.d(TAG, "【222222222】data:" + dataArray[1]);
Log.d(TAG, "【222222222】music:" + intent.getStringExtra("music"));
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
}
}
}

发送广播

发送明确指定(MyBroadcastReceiver1) 的广播

  /**
* 发送有序广播 明确指定MyBroadcastReceiver1接收者
*/
public void sendOrderBroadcast(View view) {
/**
* 两个接收者在AndroidManifest.xml是这样订阅的:怎么订阅,就怎么发送
* <intent-filter>
* <!-- Action这是必写的 -->
* <action android:name="my.MyBroadcastReceiver.custom.action" />
*
* <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
* <data android:scheme="OOO" /> <!-- 注意:这里不能加 : -->
* </intent-filter>
*/
Intent intent = new Intent();
intent.setAction("my.MyBroadcastReceiver.custom.action");
intent.setData(Uri.parse("OOO:张雨生第四张专辑")); // 注意:要加 :
intent.putExtra("music", "大海歌曲"); // 而外携带值 /**
* 参数三:明确指定 接收者 MyBroadcastReceiver1
*/
sendOrderedBroadcast(intent, // 意图
null, // 谁能接收我的广播(自定义权限)
new MyBroadcastReceiver1(), // 可以指定的 接收者
null, // 用于处理的Handler
9, // 初始化Code
null, // 初始化数据
null // Bundle携带的参数
);
}

Log日志:【222222222】的优先级最高 先接收到广播(然后中断广播),   【1111111111】还可以接收到广播 (是因为【1111111111】是明确指定的 接收者,一定会接收到)

12-17 19:54:54.987 2374-2374/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getAction():my.MyBroadcastReceiver.custom.action
12-17 19:54:54.987 2374-2374/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getDataString():OOO:张雨生第四张专辑
12-17 19:54:54.987 2374-2374/liudeli.croadcast1 D/MyBroadcastReceiver: 【1111111111】intent.getAction():my.MyBroadcastReceiver.custom.action
12-17 19:54:54.987 2374-2374/liudeli.croadcast1 D/MyBroadcastReceiver: 【1111111111】intent.getDataString():OOO:张雨生第四张专辑

Android-有序广播明确指定接收者的更多相关文章

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

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

  2. Android中广播接收者BroadcastReceiver详解

    1. 接收系统的广播步骤 (1)  新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 public class SdCardBroadcastReceiver ext ...

  3. Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)

    前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...

  4. Android学习笔记(十二)BroadcastReceiver的有序广播和优先级

    前两篇博文中简单整理了普通广播,其实还有有序广播,有序广播在开发中也是比不可少的,可以给广播接收者设定优先级来控制接受顺序,并却可以中断广播传递等等. 一.两种Broadcast: · 普通广播(No ...

  5. Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...

  6. android 51 有序广播

    无序广播:一条广播发送出去,多个接收者接收没有顺序.有序广播:广播接收者可以设置优先级,优先级高的先收到广播.有序广播可以设置优先级. mainActivity.java package com.sx ...

  7. 有序广播和标准广播 --Android开发

    一.标准广播和有序广播也很容易理解的. 标准广播: (1)通过sendBroadcast()方法发送 (2)通过异步方式发送,广播接收者的执行顺序是不明确的 有序广播: (1)通过sendOrderB ...

  8. Android(java)学习笔记122:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1)有序广播> 接受者有优先级, ...

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

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

随机推荐

  1. VS2010 C++环境下DLL和LIB文件的生成与调试 备忘

    利用VS2010工具,调试DLL文件的方法现总结如下: 在一个解决方案中生成两个工程,假设MYDLL和MYDLG两个工程,前者是DLL工程,后者DLG调用前边的DLL工程.设置如下: 目录如下:图,本 ...

  2. mysql master or master copy

    双主复制: 在两台server配置my.cnf [root@localhost mysql]# egrep -v "^$|^#" /etc/my.cnf datadir = /my ...

  3. 学习blus老师js(4)--DOM

    一.DOM节点 1.获取子节点: childNodes  nodeType         节点类型 children            只包括元素,不包括文本:  子节点只算第一层.只算孩子一级 ...

  4. Java 数组类型转字符串类型

    Java手册 String public String() 初始化一个新创建的 String 对象,使其表示一个空字符序列.注意,由于 String 是不可变的,所以无需使用此构造方法. String ...

  5. Bootstrap-Plugin:滚动监听(Scrollspy)插件

    ylbtech-Bootstrap-Plugin:滚动监听(Scrollspy)插件 1.返回顶部 1. Bootstrap 滚动监听(Scrollspy)插件 滚动监听(Scrollspy)插件,即 ...

  6. 语音-数字中继-E1-学习帖

     1.电话线,俗称数字中继,模拟线路,一门电话线只能跑一个电话号码,用模拟语音卡:2.光纤,信令有两种30B+D(也叫pri信令)或者7号信令,数字线路,一路可以跑30路电话,用数字语音卡:数字语音卡 ...

  7. 5月23日笔记-js绑定事件、解绑事件、复合事件

    each() $("p").each(function(i,ele){ //alert(ele.innerHTML); alert($("p:eq("+i+&q ...

  8. Carrying per-request context using the HttpRequestMessage.Properties

    In a Web API application, I use Castle Windsor to supply services configured with PerWebRequest life ...

  9. Mongodb 集群加keyFile认证

    介绍 自从远古计绳结开始,数据库的存储就注定了今天的地位和多样性,Nosql的出现更是解决了现有的关系型数据库无法解决的一些难题,对高性能,灵活度,扩展性,海量数据的问题.随之而出现的高速内存索引数据 ...

  10. 初尝微信小程序开发与实践

    这可能是一个java程序员最不务正业的一次分享了. 小程序的火热相信不用我多说了,年初的时候老婆去浦东某达面试,甚至都被问有没有小程序测试经验.俨然小程序成为了互联网公司自PC,WAP,安卓,IOS之 ...