android中发送广播如何发送一个广播

Android 两种注册、发送广播的区别 - 简书
Android 两种注册、发送广播的区别
关键字:注册广播 BroadcastReceiver
前言:记录了Service的使用,这次来记录另一个四个组件之一的BroadcastReceiver。主要介绍两种发送和注册广播的区别。
BroadcastReceiver广播接收者用于接收系统或其他程序(包括自己程序)发送的广播。
一.注册广播
在android中,我们如果想接收到广播信息,必须自定义我们的广播接收者。要写一个类来继承BroadcastReceiver,并且重写其onReceive()方法,实现接收到特定广播所要做的事情。
这是一个自定义的广播接收者:
public class MyBroadCastReceiver extends BroadcastReceiver
public void onReceive(Context context, Intent intent)
//在这里可以写相应的逻辑来实现一些功能
//可以从Intent中获取数据、还可以调用BroadcastReceiver的getResultData()获取数据
我们已经定义好了一个广播接收者。要想使用它接受到广播,就要注册这个广播接收者。
有两种方式注册广播:
(1)代码中动态注册
步骤如下:
实例化自定义的广播接收者
实例化意图过滤器,并设置要过滤的广播类型(如,我们接收收到短信系统发出的广播)
使用Context的registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)方法注册广播
//new出上边定义好的BroadcastReceiver
MyBroadCastReceiver yBroadCastReceiver = new MyBroadCastReceiver();
//实例化过滤器并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//注册广播
myContext.registerReceiver(smsBroadCastReceiver,intentFilter,
"android.permission.RECEIVE_SMS", null);
(2)在Manifest.xml中静态注册
直接在Manifest.xml文件的&application&节点中配置广播接收者。
&receiver android:name=".MyBroadCastReceiver"&
&!-- android:priority属性是设置此接收者的优先级(从-) --&
&intent-filter android:priority="20"&
&actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/&
&/intent-filter&
&/receiver&
还要在&application&同级的位置配置可能使用到的权限
&uses-permission android:name="android.permission.RECEIVE_SMS"&
&/uses-permission&
(3)两种注册广播的不同
第一种不是常驻型广播,也就是说广播跟随程序的生命周期。
第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
二.发送广播
当我们需要发送一个自定义的广播来通知程序中其他组件一些状态时,就可以使用发送一条广播的方式。
有两种方式分别发送两种不同的广播:
通过mContext.sendBroadcast(Intent)或mContext.sendBroadcast(Intent, String)发送的是无序广播(后者加了权限);
通过mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)发送的是有序广播。
无序广播:所有的接收者都会接收事件,不可以被拦截,不可以被修改。
有序广播:按照优先级,一级一级的向下传递,接收者可以修改广播数据,也可以终止广播事件。
(1)无序广播的使用:
定义一个按钮,设置其点击事件,发送一个无序广播。
Intent intent = new
//设置intent的动作为com.example.broadcast,可以任意定义
intent.setAction("com.example.broadcast");
//发送无序广播
sendBroadcast(intent);
定义一个广播接收者,来接收这个广播事件。通过Toast的打印判断是否收到广播
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"收到广播", Toast.LENGTH_SHORT).show();
在Manifest.xml中配置该接收者。
android:name=".MyReceiver" &
&intent-filter&
&!-- 动作设置为发送的广播动作 --&
&action android:name="com.example.broadcast"/&
&/intent-filter&
&/receiver&
运行结果为:Toast打印出 “收到广播”。
(2)有序广播的使用
和无序广播使用不同的是 通过 mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)和每个接收者设置优先级,就可以在小于自己优先级的接收者得到广播前,修改或终止广播。
定义一个按钮,设置其点击事件,发送一个有序广播。
Intent intent = new
//设置intent的动作为com.example.broadcast,可以任意定义
intent.setAction("com.example.broadcast");
//发送无序广播
//第一个参数:intent
//第二个参数:String类型的接收者权限
//第三个参数:BroadcastReceiver 指定的接收者
//第四个参数:Handler scheduler
//第五个参数:int 此次广播的标记
//第六个参数:String 初始数据
//第七个参数:Bundle 往Intent中添加的额外数据
sendOrderedBroadcast(intent, null, null, null, "这是初始数据", );
定义多个广播接收者,来接收这个广播事件。通过Toast的打印判断是否收到广播
public class MyReceiver1 extends BroadcastReceiver {
public MyReceiver1() {
public void onReceive(Context context, Intent intent) {
//获取广播中的数据(即得到 "这是初始数据" 字符串)
String message = getResultData();
Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
//修改数据
setResultData("这是修改后的数据");
public class MyReceiver2 extends BroadcastReceiver {
public MyReceiver2() {
public void onReceive(Context context, Intent intent) {
String message = getResultData();
Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
//终止广播
abortBroadcast();
public class MyReceiver3 extends BroadcastReceiver {
public MyReceiver3() {
public void onReceive(Context context, Intent intent) {
String message = getResultData();
Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
在Manifest.xml中配置该接收者。并设置优先级:MyReceiver1&MyReceiver2&MyReceiver3。
&!-- 优先级相等的话,写在前面的receiver的优先级大于后面的 --&
android:name=".MyReceiver1" &
&!-- 定义广播的优先级 --&
&intent-filter android:priority="1000"&
&!-- 动作设置为发送的广播动作 --&
&action android:name="com.example.broadcast"/&
&/intent-filter&
&/receiver&
android:name=".MyReceiver2" &
&!-- 定义广播的优先级 --&
&intent-filter
android:priority="0"&
&!-- 动作设置为发送的广播动作 --&
&action android:name="com.example.broadcast"/&
&/intent-filter&
&/receiver&
android:name=".MyReceiver3" &
&!-- 定义广播的优先级 --&
&intent-filter
android:priority="-1000"&
&!-- 动作设置为发送的广播动作 --&
&action android:name="com.example.broadcast"/&
&/intent-filter&
&/receiver&
运行结果:MyReceiver1得到广播数据后打印“这是初始数据”,MyReceiver2接收到广播数据打印“这是修改后的数据”,MyReceiver3没有打印。
个人主页 : https://bakumon.me/
关注微博 : http://weibo.com/twimb
1.广播的分类 (1)按照发送的方式分类 标准广播是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几乎是同一时间收到消息的。他们之间没有先后顺序可言,而且这种广播是没法被截断的。有序广播是一种同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到...
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下: 1.同一app内部的同一组件内的消息通信(单...
诸多无奈,最近在改一个项目的bug的时候,脑子老是一片空白,可能是最近脑子不够用,总之,好多东西忘了,阅读一些别人的文章,或者书籍,做个记录,时常翻翻,免得一味的研究新技术,把自己架空了。 本文是阅读后转载自http://www.cnblogs.com/lwbqqyumid...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
前言 本来想写一下广播的,发现查阅后有整理的不错的,只好转载图个简便,日后好复习转载:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.[Android]广播机制概述 Android广播分为两个方面:广播发送者和广播接收...
感谢@羊有趣 同学的建议,把作业3转换成流程图的格式。于是有了这篇作业4。 做完以后得到了禹宸老师第一时间的指点。 1、逻辑符号使用 尽量将文字性描述转换成逻辑符号(本例中小于改成<,千分之改成‰,中文改成阿拉伯数字),这样有利减少干扰因素,方便读者准确识别内容。 2、滥用...
大味长沙--老风味食之秘栏目组寻风采味之旅8月启程! 都说英语六级难,我觉得难的反而是我们的各地方言! 譬如湖南,月亮粑粑,斗里坐个嗲嗲。嗲嗲出来买菜,斗里坐个奶奶。奶奶出来绣花,绣杂糍粑。糍粑跌得井里,变哒嘎妈。嘎妈上树,变哒班住。班住咕咕咕,和尚恰豆腐。豆腐一哺渣,和尚...
礼拜六 多云 涵月妈妈
今天休息,在家准备了一天,明天一家三口回老家看望涵月的爷爷!平时涵月学习紧张,老公工作也很忙,离着老家又远,所以回去趟要好好计划的!尽管这样,我们平时还是会寻找着一切可利用的时间回去看望老人!涵月爷爷已经七十多岁了,能够与老...
点击访问原文您还可以加入全栈技术交流群(QQ群号:) 之前编译安装php时折腾了很久,很是恼火,现在终于理顺了。整理一下。 1、安装依赖文件 假如不安装这些开发库,到时候需要自己安装好多东西 其他依赖文件 2、安装php 编译,假如提示 则需要安装libm...
爱情自古以来都是文人墨客钟爱的题材,在如今歌曲、影视剧中,爱情也成为了不可或缺的元素,可实际上,谈恋爱既不像歌曲中传唱的如此感天动地,也没有如韩剧呈现出的那么浪漫煽情。相比痛苦和甜蜜,两个人现实中大部分时间都是在了解和磨合,所以懂得恋爱中的“潜规则”也就变得尤为重要,那么恋...&>&android发送UDP广播
android发送UDP广播
上传大小:653KB
在android平台实现UDP广播的发送示例程序
综合评分:4
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有50条
关键部分 InetAddress broadcastAddr = InetAddress.getByName(&255.255.255.255&);
我的手机上应用OK, 设备端我开了个udp server, 若需要接受server端的数据, 加上
udpSocket.receive(recivedata);
很好 正需要 学习了
觉得挺 厉害,很好的一个软件
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
android发送UDP广播
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
xiaoxiaobian3310903
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
android发送UDP广播1、使用标准广播
1.1 定义广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
String string=arg1.getStringExtra("data");
Toast.makeText(arg0, "received:"+string, Toast.LENGTH_SHORT).show();
1.2 修改AndriodManifest.xml,注册广播接收器
&receiver android:name=".MyBroadcastReceiver"&
&intent-filter&
&action android:name="com.example.broadcastreceiverdemo.BROADCAST"&&/action&
&/intent-filter&
&/receiver&
1.3 补充MainActivity代码
public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button)findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent("com.example.broadcastreceiverdemo.BROADCAST");
intent.putExtra("data", "hello");
sendBroadcast(intent);
2、使用本地广播
本地广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播,这样就提高了数据传播的安全性。但本地广播无法通过静态注册的方式来接收。本地广播使用LocalBroadcastManager来对广播进行管理,并提供了发送广播及注册广播接收器的方法。
//定义广播接收器
public class LocalReceiver extends BroadcastReceiver {
@Override public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
String string=arg1.getStringExtra("data");
Toast.makeText(arg0, "received:"+string, Toast.LENGTH_SHORT).show();
//MainActivity
public class MainActivity extends Activity {
private IntentFilter intentF private LocalReceiver localR private LocalBroadcastManager localBroadcastM
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter("com.example.localbroadcastdemo.LOCALBROADCAST");
localReceiver=new LocalReceiver();
//获取实例
localBroadcastManager=LocalBroadcastManager.getInstance(this);
//注册本地广播监听器
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
Button button=(Button)findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent=new Intent("com.example.localbroadcastdemo.LOCALBROADCAST");
intent.putExtra("data", "hello");
//发送本地广播
localBroadcastManager.sendBroadcast(intent);
@Override protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver); }
@Override public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
阅读(...) 评论()没有更多推荐了,
不良信息举报
举报内容:
android-BroadcastReceiver 发送一条普通广播
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长![安卓开发] Broadcast 三种广播的使用总结
1、什么是安卓的Broadcast?
安卓的四大之一,是一种广泛应用在应用程序之间传输信息的机制。
2、什么是安卓的BroadcastReceiver?
是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自和应用中的广播。例如系统的广播有开机广播: 系统在开机时候会发送开机广播,程序接收到之后,能进行开机自启动。
网络状态改变广播: 3g变wifi、网络断开等。电量改变广播等等。。。
3、Anroid为什么要这样设计?
大大减少开发工作量和开发周期
作为开发者,只需要掌握BroadcastReceiver
4、怎么理解Broadcast和BroadcastReceiver ?
Broadcast就像现实中的广播电台,他发广播信号来,然后我们用收音机来接收,然后处理,并且播放出声音, BroadcastReceiver就相当于那台收音机。
5、使用方法
把信息装入一个Intent对象(如:Action、Category),通过调相应的方法将Intent对象以广播的方式发送出去:
sendBroadcast();
sendOrederBroadcast();
sendStickyBroadcast();
当Intent发送之后,所有已经注册vedBroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceiver()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceiver()方法。
BroadcastReceiver需要注册
代码动态注册
6、注意!!!!
BroadReceiver生命周期只有十秒左右,不能直接执行耗时操作,不然会出现ANR(应用程序无响应),也不能用子线程来做,因为每次广播来的时候都会创建一个Reveiver对象,并且调用onReceiver,执行完之后 ,对象会立刻被销毁,子线程也没了
要做耗时操作的话,应该通过发送Intent给Service,由Service来完成。
动态注册广播接受者的话要在Destory回调事件进行unregister
7、广播的分类
普通广播 (Normal broadcast)
- 所有监听该广播接受者都可以监听到该广播
- 同级别接收先后顺序是随机的(无序)
- 级别低的后收到广播
- 接收器不能截断广播的继续传播,也不能处理广播
- 同级别动态注册高于静态注册
有序广播 (Oredered broadcast)
- 按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-之间,值越大优先级越高,可以终止广播的继续传播,接受者可以修改intent的内容。
- 同级别接收顺序是随机的
- 级别低的后收到
- 能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。
- 能处理广播
- 同级别动态注册高于静态注册
异步广播 (粘滞性滞留广播) ps:已被弃用
- 不能处理结果给下一个接收者,无法终止广播。
- 一直存在
- 可以先发送广播,再注册接收器
- 需要在清单文件添加android.permission.BROADCAST_STICKY权限
布局actibity_main三个按钮:
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btO
private Button btT
private Button btT
MyReiceiverThree myReiceiver = new MyReiceiverThree();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btOne = (Button) findViewById(R.id.bt_one);
btTwo = (Button) findViewById(R.id.bt_two);
btThree = (Button) findViewById(R.id.bt_three);
btOne.setOnClickListener(this);
btTwo.setOnClickListener(this);
btThree.setOnClickListener(this);
//动态注册,在当前activity的生命周期內运行
/*IntentFilter filter= new IntentFilter(Config.BC_ONE_ACTION);
MyReiceiver myReiceiver = new MyReiceiver();
registerReceiver(myReiceiver,filter);*/
public void onClick(View view) {
Intent intent = new Intent();
switch (view.getId()){
case R.id.bt_one:
//发送普通广播
intent.setAction(Config.BC_ONE_ACTION);
intent.putExtra(&msg&,&这是普通广播&);
sendBroadcast(intent);
case R.id.bt_two:
//有序广播
intent.setAction(Config.BC_TWO_ACTION);
intent.putExtra(&msg&,&这是有序广播&);
sendOrderedBroadcast(intent,null);
//其中第二个参数是设置权限,即接收器必须具有相应的权限才能正常接收到广播。
case R.id.bt_three:
//异步广播
intent.setAction(Config.BC_THREE_ACTION);
intent.putExtra(&msg&,&这是异步广播&);
sendStickyBroadcast(intent);
//可以先发送 后注册
IntentFilter filter = new IntentFilter(Config.BC_THREE_ACTION);
registerReceiver(myReiceiver, filter);
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReiceiver);
MyReceiver.java
public class MyReiceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
//获取处理的的广播,普通广播不能获取处理
//true代表如果前面的接收器没有存放数据,则自动创建一个空的Bundle对象,false则表示如果前面的接收器如果没有存放任何数据则返回null。
bundle= getResultExtras(true);
System.out.println(&接收器1接收到处理的值:&+bundle.getString(&msg&));
System.out.println(&接收器1:&+intent.getStringExtra(&msg&));
MyReceiverTwo.java
public class MyReiceiverTwo extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context,intent.getStringExtra(&msg&),Toast.LENGTH_SHORT).show();
System.out.println(&接收器2:&+intent.getStringExtra(&msg&));
abortBroadcast();
//截断广播,不让别的接收器继续接收,有序广播才能成功拦截
//处理广播
Bundle bundle = new Bundle();
bundle.putString(&msg&,&处理过后的广播&);
setResultExtras(bundle); //
MyReceiverThree.java
public class MyReiceiverThree extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
//Toast.makeText(context,intent.getStringExtra(&msg&),Toast.LENGTH_SHORT).show();
System.out.println(&接收器3:&+intent.getStringExtra(&msg&));
Config.java
public class Config {
public static final String BC_ONE_ACTION = &com.example.testbroadcasetwo.bcone&;
public static final String BC_TWO_ACTION = &com.example.testbroadcasetwo.bctwo&;
public static final String BC_THREE_ACTION = &com.example.testbroadcasetwo.bcthree&;
manifest.xml
//异步广播需要 一个权限
//静态注册,全局有效
//第一个接收器
//添加级别
//第二个接收器
//添加级别
9、onReceiver回调更新ui
注意: 必须使用动态注册才能实现回调更新ui
目录结构:
Confiug.java 定义一个常量作为actionvcD4NCjxwcmUgY2xhc3M9"brush:">
public class Config {
public static String BC_ONE = &com.example.testbroadcast.bcone&;
TYPE.java 枚举类,集合,没用了,用来判断是什么广播的
public enum TYPE {
HandleBroadcas.java p层的处理数据类
public class HandleBroadcast {
private IShowView iShowV
public HandleBroadcast(final IShowView iShowView, Context context) {
this.iShowView = iShowV
this.context =
//必须动态注册才能实现回调
MyBroadcastReceiver broadcast = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Config.BC_ONE);
context.registerReceiver(broadcast, intentFilter);
broadcast.setiShowView(new IShowView() {
public void updateText(String msg) {
iShowView.updateText(msg);
public void sendMyBroadcast(TYPE type) {
Intent intent = new Intent();
switch (type) {
case NORMAL:
//普通广播
intent.putExtra(&msg&, &普通广播发送成功&);
intent.setAction(Config.BC_ONE);
context.sendBroadcast(intent);
MyBroadcast.java 广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
private IShowView iShowV
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String msg = intent.getStringExtra(&msg&);
iShowView = (MainActivity)
if (action.equals(Config.BC_ONE)) { //接收到普通广播
iShowView.updateText(msg);
//回调给HandleBroadcast
public void setiShowView(IShowView iShowView) {
this.iShowView = iShowV
IShowView.java 回调到activity更新ui的接口
public interface IShowView {
void updateText(String msg);
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener,IShowView{
private Button btO
private TextView mTvR
//p层,处理数据
private HandleBroadcast handleB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handleBroadcast = new HandleBroadcast(this,this);
btOne = (Button) findViewById(R.id.bt_one);
mTvResult = (TextView) findViewById(R.id.tv_result);
btOne.setOnClickListener(this);
public void onClick(View view) {
switch (view.getId()){
case R.id.bt_one:
handleBroadcast.sendMyBroadcast(TYPE.NORMAL);
* 广播接收处理完毕之后回调更新ui
* @param msg 要显示的文字
public void updateText(String msg) {
mTvResult.setText(msg);
activity_main.xml

我要回帖

更多关于 android adb 发送广播 的文章

 

随机推荐