Broadcast Reciever的使用

在Xamarin开发,使用MessageCenter在ViewModel和View之间传递值 最近在学习Xamarin.Forms的开发,并且使用MVVM的结构。在学习的过程中发现页面的点击命令都在ViewModel中的Command实现,如果想要点击按键之后实现页面的跳转,必须在UI层调用 Navigation.Push方法才能实现。后来想想可以用MessageCenter实现。下面是实现方法: 首先定义一个传递的数据类, public class NavigationMessag 阅读详情

Broadcast Reciever的使用

Demo地址:https://code.youkuaiyun.com/kernel_/broadcastreceiver
注意:Demo使用了roboguice的框架,和Broadcast Reciever里的一个隐式intent不能缺少setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

首先:创建自己的BroadcastReceiver对象,需要继承android.content.BroadcastReceiver,并实现其onReceive方法。下面创建一个名为MyReceiver广播接收者:

MyReceiver.java广播接收者

package com.example.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;

/**
 * @author 张鸿岩 422043466 2015年11月15日
*/
public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("action_test")) {

        String msg = intent.getStringExtra("msg");
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        Intent in = new Intent();
        Uri uri = Uri.parse("tel:10086");
        in.setAction(Intent.ACTION_CALL);
        in.setData(uri);
        in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//其实flag和设置Activity的LaunchMode为SingleTask的作用是一样的
        context.startActivity(in);
    }

}
}

静态注册方法

静态注册是在AndroidManifest.xml文件中配置的,我们就来为MyReceiver注册一个广播地址:

    <receiver android:name="com.example.broadcast.MyReceiver" >
        <intent-filter>
            <action android:name="action_test" />
        </intent-filter>
    </receiver>

动态注册方法

动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播,下面我们就来看一下注册的代码:

MyReceiver receiver = new MyReceiver();          
IntentFilter filter = new IntentFilter();  
filter.addAction("action_test");          
registerReceiver(receiver, filter); 

动态注销

注意,registerReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,所以可以直接调用。在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作:

@Override  
protected void onDestroy() {  
super.onDestroy();  
unregisterReceiver(receiver);  
} 

普通广播

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
为了验证以上论断,新建三个BroadcastReceiver,演示一下这个过程,FirstReceiver、SecondReceiver和ThirdReceiver的代码如下:

FirstReceiver.java
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.util.Log;   
public class FirstReceiver extends BroadcastReceiver {       
private static final String TAG = "NormalBroadcast";       
@Override  
public void onReceive(Context context, Intent intent) {  
    String msg = intent.getStringExtra("msg");  
    Log.i(TAG, "FirstReceiver: " + msg);  
}   
} 
SecondReceiver.java
package com.example.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
 * @author 张鸿岩
 *422043466
 * 2015年11月15日
*/
public class SecondReceiver extends BroadcastReceiver {

 private static final String TAG = "NormalBroadcast";  

    @Override  
    public void onReceive(Context context, Intent intent) {  
        String msg = intent.getStringExtra("msg");  
        Log.i(TAG, "SecondReceiver: " + msg);  
    } 
}
ThirdReceiver.java
package com.example.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
* @author 张鸿岩
*422043466
* 2015年11月15日
*/
public class ThirdReceiver extends BroadcastReceiver {
private static final String TAG = "NormalBroadcast";      
@Override  
public void onReceive(Context context, Intent intent) {  
    String msg = intent.getStringExtra("msg");  
    Log.i(TAG, "ThirdReceiver: " + msg);  
}  
}

这三个接收者都接收到这条广播了,稍微修改一下三个接收者,在onReceive方法的最后一行添加以下代码,试图终止广播:

abortBroadcast(); 

再次点击发送按钮,控制台中三个接收者仍然都打印了自己的日志,表明接收者并不能终止广播。

有序广播

有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
为了演示有序广播的流程,我们修改一下上面三个接收者的代码,如下:

FirstReceiver.java
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  

public class FirstReceiver extends BroadcastReceiver {  

private static final String TAG = "OrderedBroadcast";  

@Override  
public void onReceive(Context context, Intent intent) {  
    String msg = intent.getStringExtra("msg");  
    Log.i(TAG, "FirstReceiver: " + msg);  

    Bundle bundle = new Bundle();  
    bundle.putString("msg", msg + "@FirstReceiver");  
    setResultExtras(bundle);  
}    
}  

在FirstReceiver和SecondReceiver中最后都使用了setResultExtras方法将一个Bundle对象设置为结果集对象,传递到下一个接收者那里,这样以来,优先级低的接收者可以用getResultExtras获取到最新的经过处理的信息集合。
代码改完之后,我们需要为三个接收者注册广播地址,我们修改一下AndroidMainfest.xml文件

<receiver android:name=".FirstReceiver">  
<intent-filter android:priority="1000">  
    <action android:name="action_test"/>  
    <category android:name="android.intent.category.DEFAULT" />  
</intent-filter>  
</receiver>  
<receiver android:name=".SecondReceiver">  
<intent-filter android:priority="999">  
    <action android:name="action_test"/>  
    <category android:name="android.intent.category.DEFAULT" />  
</intent-filter>  
</receiver>  
<receiver android:name=".ThirdReceiver">  
<intent-filter android:priority="998">  
    <action android:name="action_test"/>  
    <category android:name="android.intent.category.DEFAULT" />  
</intent-filter>  
</receiver> 
Broadcast:大数据处理的效率提升利器 它能够将一份数据同时广播到多个计算节点上,并且是基于共享内存的方式进行传输,从而避免了数据的冗余存储和网络传输的开销。通过使用Broadcast,我们可以大大提高数据处理的效率,减少计算资源的消耗,使得在大数据环境下的分析任务变得更加高效可行。通过合理使用Broadcast技术,并结合分布式计算框架,我们能够更好地应对大规模数据处理的挑战,为企业决策、科学研究和商业运营带来更多的机遇和成果。其次,对于频繁更新的数据,应及时更新广播变量,以确保数据的准确性和一致性。获取广播的数据,并进行相应的数据处理操作。 阅读详情

相关推荐

跨进程通讯之BroadcastReciever实例(源码)

首先运行receiver程序,然后就可以关闭receiver程序了。接收广播并不依赖于程序的状态。就算程序关闭了,仍然可以接收广播。然后再启动 sendbroadcast程序。并在文本框中输入“android”,然后单击按钮,会弹出一个显示文本框内容的对话框。当关闭对话框后,会 显示一个Toast信息提示框,这个信息框是由receiver程序弹出的。

Drozer的安装与使用

Drozer的安装 下载ubuntu 安装agent客户端到手机 在powershell中运行Adb install agent.apk,安装完成后启动drozerAgent,点击右下角“开启”按钮,开启Agent 建立session连接 管理员运行powershell ,输入命令adb forward tcp:31415 tcp:31415 打开ubuntu,运行命令drozer c...

Allison_的博客 977

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

qiuzhongyu123的博客 2万+

BroadCast Receiver(广播)详解

BroadCastReceiver是四大组件之一,是一个全局的监听器BroadCastReceiver有两大功能,广播发送者,广播接收者BroadCastReceiver分为静态广播和动态动态广播。

suiyue010211的博客 8405

2025.03.14【读书笔记】|GWAS分析神器:BOLT-LMM工具介绍与快速安装

在生物信息学领域,全基因组关联分析(GWAS)已成为揭示遗传与疾病关系的强有力工具。BOLT-LMM作为一款专为大规模样本量设计的GWAS分析工具,将极大地提高研究人员的工作效率。大家好,今天我们来聊聊一个非常强大的生物信息学工具——BOLT-LMM。它是基于线性混合模型(LMM)的全基因组关联分析(GWAS)分析工具,通过快速的方差近似方法在计算效率上实现了显著的提升。BOLT-LMM的高效性能使其成为大规模样本GWAS分析的理想选择,它将进一步推动生物信息学和遗传学研究的发展。

1094

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1545

[Android知识体系]之四大组件:broadcastReciever

好的好的现在轮到一个使用起来很简单的组件——broadcastReciever!虽然使用简单但也不能小看它,做好总结,以后碰见它还可以再复习复习所学,更深刻地理解。任何一样东西都有学习的价值呐。 初认识android广播分为两个方面,广播发送者和广播接受者。通常情况下,broadcastReciever就是广播接受者(器)。广播作为android组件间的通信方式,可以使用的场景如下:1.同一app内

yoxiyehei_wzx的博客 669

发那科FOCAS 1/2文档——核心库文件

在开始开发前,明确目标 CNC 的具体型号、连接方式(HSSB/TCP/IP)、软件版本和配置(如轴数、程序号位数),并据此正确配置开发环境和编译选项。开发时需要包含相应的头文件。这是开发跨平台应用时需要特别注意的地方。这是开发应用时必须了解的核心文件。

snailiot的博客 1023

44. 【Android教程】广播接收器:Broadcast Receiver

首先看看官方文档的部分解释:简单翻译如下:Broadcast Receiver 是一个基类,继承自它的类可以用来处理通过发送过来的 intent 信息。与其他组件不同的是,Broadcast Receiver 支持动态注册,即你可以在代码里调用来注册广播接收器,也可以和 Activity、Service 一样使用静态注册的方式,即在 AndroidManifest.xml 文件中进行注册。这是从“Broadcast Receiver”文档里面截取的一部分,解释的不是很全面。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 2090

使用 arxiv-sanity 实时跟进自己研究领域的Paper

介绍 arxiv.org是一个非常大的预印本资源库,里面有大量的最新的论文,但缺点是浏览、搜索和排序不是很方便。这个资源库每天会更新大量的论文,如果通过手动搜索和浏览则效率很低,高引用的好文章难以及时的找到并阅读,造成时间的浪费。因此 使用 ...

John's Blogs 8280

【LaTex】3.5 数据分析

简述了LaTex柱状图、饼图、折线图的画法。

你的指尖有改变世界的力量 5891

Didn‘t find class “com.example.mqqt.MyReceiver“ on path: DexPathList[[zip file 广播服务报错

在用broadcast的时候,把它作为一个内部类,出现了错误:Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.mqqt.MyReceiver" on path: DexPathList[[zip file "/data/app/com.example.mqqt-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]],原因是Main

lzc_a的博客 684

luks-磁盘加密工具

linux磁盘加密配置工具及步骤详解

zdd56789的博客 123

我的Android 4 学习系列之Intent 和 Broadcast Reciever

目录 Intent 简介 使用隐式和显式Intent启动Activity、子Acitivity和Service 使用Linkify 使用Broadcast Intent 广播事件 使用 Pending Intent Intent Filter 和 Broadcast Reciever 简介 使用 Intent Filter 扩展应用程序的功能 监听 Broadcast In...

weixin_33829657的博客 768

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

安卓之BroadcastReceiver的应用与展望

BroadcastReceiver是Android操作系统中一个核心的组件,负责在应用间传递消息。本文旨在对BroadcastReceiver进行概述,探讨其应用场景、高级特性以及局限性,并就性能优化和未来发展趋势提出建议。此外,本文还将提供代码实例以供实践参考。

wlred1980的博客 1752

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android 四大组件之BroadcastReceiver

本来想自己写一篇的,不过看到一篇讲的很详细的,这里我就转载一下分享 BroadcastReceiver(广播接收器)是Android中的四大组件之一。         下面是Android Doc中关于BroadcastReceiver的概述:         ①广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍

jiapeng的专栏 600

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android 之 BroadcastReceiver 牛刀小试

答:Broadcast直译广播,我们举个形象的例子来帮我理解下BroadcastReceiver,记得以前读书的时候,每个班级都会有一个挂在墙上的大喇叭,用来广播一些通知,比如,开学要去搬书,广播: "每个班级找几个同学教务处拿书",发出这个广播后,所有同学都会在同一时刻收到这条广播通知, 收到,但不是每个同学都会去搬书,一般去搬书的都是班里的"大力士",这群"大力士"接到这条 广播后就会动身去把书搬回可是! ——好吧,上面这个就是一个广播传递的一个很形象的例子: 大喇叭--> 发送广播 --> 所有学生都

leyang0910的博客 188

android进程保活-单进程广播守护

单进程广播守护

一起学习哈 479

andriod之BroadcastReciever--广播接受者,之初认识

主显示布局以及代码:activity_main.xml     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/

qa962839575的专栏 626

Android四大组件之--BroadcastReceiver,监测短信

Android四大组件之--BroadcastReceiver,监测短信 监测短信类 package com.example.week4_day5_sms; import java.text.SimpleDateFormat; import java.util.Date; import android.content.BroadcastReceiver; import android.

Thik叮当 528

Android BroadcastReceiver两种注册方式区别

/************ 动态注册 ************/  TextMain.java  package lxy.litsoft;      import android.app.Activity;   import android.content.BroadcastReceiver;   import android.content.Context;   impor

dzhj11的专栏 727

Android四大组件之——Broadcast学习总结

1.Broadcast概念 是一个全局的监听器,属于Android四大组件之一。Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制。而BroadcastReceiver(广播接收器)是对发送出来的 广播进行过滤接受并响应的一类组件。 2.Broadcast作用:监听 / 接收 应用发出的广播消息,并做出响应。 3.三要素和两步骤。 (1)Broadcast (广播) – 用于发送广播 (2)BroadcastReceiver (广播接收器) – 用于接受广播 (3)Inte

qq_41390028的博客 1020

Android程序设计

7天入门Android程序设计课程是一套入门Android的课程,首先会进行Android入门、之后会介绍Android界面开发、Activity、Intent和BroadCastReceiver、数据存储、Content Providers、Service、编程,通过本课程的学习,可以入门Android移动开发,同时掌握Android编程。

broadcastreceiver全面详解

目录     1. 定义 即 广播,是一个全局的监听器,属于Android四大组件之一 Android 广播分为两个角色:广播发送者、广播接收者 2. 作用 监听 / 接收 应用 App 发出的广播消息,并 做出响应 3. 应用场景 Android不同组件间的通信(含 :应用内 / 不同应用之间) 多线程通信 与 Android 系统在特定情况下的通信 如:电话呼入时...

zyz18813049204的博客 4510

BroadcastReceiver详解

前言:这个月写的博客文章数量比较多,因为刚入门的缘故吧,多总结,由浅入深,等后面更深入了再给大家写续篇。 学之广在于不倦,不倦在于固志。 ——晋·葛洪­ (学问的渊博在于学习时不知道厌倦,而学习不知厌倦在于有坚定的目标) 一、概述 BroadcastReceiver:直译是“广播接收者”,所以它的作用是用来接收发送过来的广播的。 那我们有必要知道:什么是广播。广播,我的理解就...

启舰 3万+
上一篇: 自定义dialog布局
下一篇: 使用Eclipse自带的git上传项目
kernel_
博客等级 码龄12年 8粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值