- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android中的广播(BroadCast)详细介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
什么是广播 。
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理.
电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据.
电台通过大功率的发射器发送内容,而在Android中则是通过sendBroadcast这个方法来发送(很形象的名字吧)。 。
用户通过调整到具体的电台频率接受电台的内容。而在Android中要接受广播中的内容则是通过注册一个BroadCastReceiver来接收的。只有发送广播的action和接收广播的action相同,接受者才能接受这个广播.
广播有什么用 。
其实,在什么是广播的第一句就已经说明了广播有什么用了。对了,笼统一点讲就是用来传输数据的。具体一点说就是: 1.实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能接受这个广播。典型的应用就是android自带的短信,电话等等广播,只要我们实现了他们的action的广播,那么我们就能接收他们的数据了,以便做出一些处理。比如说拦截系统短信,拦截骚扰电话等等 2.起到了一个通知的作用,比如在service中要通知主程序,更新主程序的UI等。因为service是没有界面的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现一个广播接受者专门用来接受service发过来的数据和通知了.
实现广播 。
现在我们就来实现一个简单的广播程序。Android提供了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定。他们之间的区别就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。首先介绍在程序中动态注册的方式.
动态注册方式 。
我们在程序中设置了三个按钮,分别是“注册广播”,“取消注册”和“发送广播”。然后每个按钮设置点击事件来完成广播的演示.
最简单的项目的建立过程和按钮事件的建立我再这里就不罗嗦了,不会的可以下载下面的DEMO源码查看。直接看三个按钮的实现方式.
首先是注册广播的按钮事件代码:
。
。
首先我们实现了一个ReceiveBroadCast 类,它继承了BroadcastReceiver并实现了其中的onReceive方法,这样当这个广播被接收的时候就会执行这个方法。注意我们在注册广播的时候使用了filter.addAction方法添加了一个过滤器。如果没有这一句,就相当于广播电台没有告诉咱们收音机用户接收的频率,就不好收听这个广播了.
再来看看如何取消注册,是的程序不再接收这个类型的广播了.
。
。
怎么样?是不是超级简单的啊,就是将我们上面的那个广播类的实例传进去就行了。现在注册,取消注册都好了,就剩下如何发送了。看代码:
。
。
每一句都注释了的,就不要我再讲了吧。一看就明白了。现在,运行程序看看效果吧。先注册一下,然后每发送一次广播上面的文字就会变化一次,表明已经接收到了广播了。按取消注册后你可以发现再按发送按钮已经接收不到广播了.
配置文件方式 。
配置和动态注册的区别在上面已经说了,这种方式适合你的程序需要长期的监测某个广播的情形,比如监测用户的短信。注册方式比较简单,相当于上面的代码只要接收的那部分就行了。不过要注意的是通过配置文件这种方式注册广播需要在单独的一个类中继承BroadReceiver,内部类是没有用的。所以我们新建了一个broadCastReceiveByXml类并继承了BroadReceive。代码如下:
。
然后在AndroidManifest中的<activity></activity>节点之后我们添加一下代码:
。
。
receiver中的android:name就是我们在程序中的那个接收广播的类。下面的intent-filter和我们讲到的功能类似,而这个action就是上面的那个flag啦。现在我们运行程序,发现同样可以实现上面的功能。运行的结果如下:
除了使用我们自己发送广播,android也内置了许多广播。比如我们上面提到的来了消息的时候android会发送一个action名为“android.provider.Telephony.SMS_RECEIVED”的广播,这个时候如果我们想要接受这个广播只要将配置文件中的那个action设置为上面这个字符串就能接收到消息信息了。android包括了许多其他的广播action,有兴趣的同学到网上搜搜就有了。这里就不再举例了.
最后此篇关于Android中的广播(BroadCast)详细介绍的文章就讲到这里了,如果你想了解更多关于Android中的广播(BroadCast)详细介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在我的 AngularJS 应用程序中看到了一些非常奇怪的行为。 制作单个 $broadcast 时,(唯一的)接收器会被触发两次。 对整个应用程序的影响就好像接收器只被触发了一次。 (即只有一件元
以下是我的类(class)中的功能: def labeling(self, value, labelMap, dtype='string'): if dtype.value == 's
只是想澄清一些事情,一些容易实现的目标,一个通过在另一个问题中观察用户试图对广播变量调用 RDD 操作而产生的问题?这是错误的,对吧? 问题是:Spark 广播变量不是 RDD,对吗?这是 Scala
我正在尝试通过聊天室让聊天应用程序运行。 在服务器端我有类似的东西: io.sockets.on('connection', function (socket) { socket.emit('co
我目前正在基于此示例开发一个简单的聊天多房间: https://github.com/Atmosphere/atmosphere-samples/blob/master/samples/chat-mu
我正在构建一个搜索指令,我希望我的应用程序的多个其他指令能够监听对文本搜索的更改。 我试图了解广播和发射之间的区别,以及什么最适合我的目的。 据我了解,$broadcast 和 $emit 之间的区别
Class ProdsTransformer: def __init__(self): self.products_lookup_hmap = {} self.bro
我有多个名为 as 和 bs 的大型数据帧(大约 30GB),一个名为 spp 的相对较小的数据帧(大约 500MB ~ 1GB)。 我试图将 spp 缓存到内存中,以避免多次从数据库或文件中读取数据
我正在以下配置上运行 Spark 应用程序: 1 个 Master 节点,2 个 Worker 节点。 每个工作线程有 88 个核心,因此总数为 88 个。核心数量 176 每个工作线程有 502 G
我想检测 LAN 中 IP:10.x.x.x 掩码:255.0.0.0 的所有设备。我首先写了一个同步 ping 程序来逐个 ping IP,但是太慢了。因此我通过使用异步ping对其进行了改进,然后
我想检测 LAN 中 IP:10.x.x.x 掩码:255.0.0.0 的所有设备。我首先写了一个同步 ping 程序来逐个 ping IP,但是太慢了。因此我通过使用异步ping对其进行了改进,然后
张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix) Python Numpy 切片和索引(高级索引、布尔索引、花式索引) Python NumPy
我试图找到这个词的起源,以及它是否有其他名称。我在网上能找到的所有用法都指向 numpy 手册。不知道以前是否使用过? 最佳答案 它最初源自 Yorick ,一种较旧的以数组为中心的编程语言,许多原始
有没有办法让 $broadcast 在初始化阶段将变量传播到 $on? {{testContent}} var app = angular
我可以要一个 $broadcast $on有多个参数, 就像是: $scope.$broadcast('event',$scope.item, $scope.item); 在任何情况下都有可能有这样的
尝试使用 Angular 的 $broadcast,当我测试它并使用字符串“hi”并在同级 Controller 中监视它时,它工作正常,如下所示: //first controller app.co
我遇到一个问题,事件已正确触发,但数据未从 Broadcast::channel 方法内的授权回调函数返回。 该事件如下所示: public function __construct($userId,
我们计划将 Telegram 与我们的项目集成。要求是当某些事件发生时,向一组用户发送通知。我已经用 Telegram 创建了一个测试机器人。我的问题是,是否可以使用机器人来做到这一点,即向用户组发送
我有一个简单的服务/工厂: angular.module('myapp').factory('User', ['$rootScope', function($rootScope) { retu
我们计划将 Telegram 与我们的项目集成。要求是当某些事件发生时,向一组用户发送通知。我已经用 Telegram 创建了一个测试机器人。我的问题是,是否可以使用机器人来做到这一点,即向用户组发送
我是一名优秀的程序员,十分优秀!