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注冊的接收者无论你的程序有没有启动有会起作用。首先介绍在程序中动态注冊的方式。

动态注冊方式

我们在程序中设置了三个button。各自是“注冊广播”。“取消注冊”和“发送广播”。

然后每一个button设置点击事件来完毕广播的演示。

最简单的项目的建立过程和button事件的建立我再这里就不罗嗦了,不会的能够下载以下的DEMO源代码查看。直接看三个button的实现方式。

首先是注冊广播的button事件代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

private ReceiveBroadCast
receiveBroadCast;  
//广播实例

public class RegisteLinster
implements OnClickListener

{

        @Override

        public void onClick(View
view)

        {

            //
注冊广播接收

            receiveBroadCast
new ReceiveBroadCast();

            IntentFilter
filter = 
new IntentFilter();

            filter.addAction(flag);    //仅仅有持有同样的action的接受者才干接收此广播

            registerReceiver(receiveBroadCast,
filter);

        }

}

public class ReceiveBroadCast
extends BroadcastReceiver

{

        @Override

        public void onReceive(Context
context, Intent intent)

        {

            //得到广播中得到的数据,并显示出来

            String
message = intent.getStringExtra(
"data");

            txtShow.setText(message);

        }

}

首先我们实现了一个ReceiveBroadCast 类。它继承了BroadcastReceiver并实现了当中的onReceive方法。这样当这个广播被接收的时候就会运行这种方法。

注意我们在注冊广播的时候使用了filter.addAction方法加入了一个过滤器。假设没有这一句,就相当于广播电台没有告诉咱们收音机用户接收的频率,就不好收听这个广播了。

再来看看怎样取消注冊。是的程序不再接收这个类型的广播了。


1

2

3

4

5

6

7

8

9

public class UnregisteLinster
implements OnClickListener

{

        @Override

        public void onClick(View
arg0)

        {

            unregisterReceiver(receiveBroadCast);

        }

}

怎么样?是不是超级简单的啊,就是将我们上面的那个广播类的实例传进去即可了。

如今注冊。取消注冊都好了。就剩下怎样发送了。看代码:


1

2

3

4

5

6

7

8

9

10

11

public class SendBroadCastListener
implements OnClickListener

{

        @Override

        public void onClick(View
arg0)

        {

            Intent
intent = 
new Intent();  //Itent就是我们要发送的内容

            intent.putExtra("data""this
is data from broadcast "
+Calendar.getInstance().get(Calendar.SECOND));  

            intent.setAction(flag);   //设置你这个广播的action,仅仅有和这个action一样的接受者才干接受者才干接收广播

            sendBroadcast(intent);   //发送广播

        }

}

每一句都凝视了的,就不要我再讲了吧。一看就明确了。如今。执行程序看看效果吧。

先注冊一下,然后每发送一次广播上面的文字就会变化一次。表明已经接收到了广播了。按取消注冊后你能够发现再按发送button已经接收不到广播了。

配置文件方式

配置和动态注冊的差别在上面已经说了,这样的方式适合你的程序须要长期的监測某个广播的情形,比方监測用户的短信。注冊方式比較简单,相当于上面的代码仅仅要接收的那部分即可了。

只是要注意的是通过配置文件这样的方式注冊广播须要在单独的一个类中继承BroadReceiver,内部类是没实用的。所以我们新建了一个broadCastReceiveByXml类并继承了BroadReceive。

代码例如以下:


1

2

3

4

5

6

7

8

9

10

public class broadCastReceiveByXml
extends BroadcastReceiver

{

    @Override

    public void onReceive(Context
arg0, Intent arg1)

    {

        Log.d("qlf""broadcast
receive by xml"
);    //由于不在主UI下,不好使用控件,所以我们这里打印到LOG里面查看效果

    }

}

然后在AndroidManifest中的<activity></activity>节点之后我们加入一下代码:


1

2

3

4

5

6

<receiver
android:name=
"com.qlf.broadCast.broadCastReceiveByXml">

    <intent-filter>

        <action
android:name=
"com.qlf.broadCastFlag">

        </action>

    </intent-filter>

</receiver>

receiver中的android:name就是我们在程序中的那个接收广播的类。以下的intent-filter和我们讲到的功能类似。而这个action就是上面的那个flag啦。如今我们执行程序,发现相同能够实现上面的功能。执行的结果例如以下:

除了使用我们自己发送广播,android也内置了很多广播。比方我们上面提到的来了消息的时候android会发送一个action名为“android.provider.Telephony.SMS_RECEIVED”的广播,这个时候假设我们想要接受这个广播仅仅要将配置文件里的那个action设置为上面这个字符串就能接收到消息信息了。android包含了更多的广播action。有兴趣的同学到网上搜搜就有了。这里就不再举例了。

时间: 2024-08-09 06:35:16

Android之旅---广播(BroadCast)的相关文章

Android之旅---广播(BroadCast)[转]

本文转自 http://www.cnblogs.com/qianlifeng/archive/2011/03/06/1972305.html 什么是广播 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.我们拿广播电台来做个比方.我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了.Android中的广播机制就和这个差不多的道理. 电台发送的内容是语音,而在Andr

Android为什么需要广播Broadcast

   在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的.然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成. 在

android基础:广播BroadCast简单案例

运行效果 string.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestBroadcast</string> <string name="param_input">请输入发送参数</string> <string name="

Android 7.0 ActivityManagerService(5) 广播(Broadcast)相关流程分析

本篇博客旨在分析Android中广播相关的源码流程. 一.基础知识 广播(Broadcast)是一种Android组件间的通信方式. 从本质上来看,广播信息的载体是intent.在这种通信机制下,发送intent的对象就是广播发送方,接收intent的对象就是广播接收者. 在Android中,为广播接收者定义了一个单独的组件:BroadcastReceiver. 1 BroadcastReceiver的注册类型 在监听广播前,要将BroadcastReceiver注册到系统中. Broadcas

Android之旅十七 android中的广播使用

广播是一种广泛运用在应用程序之间传输信息的机制,android中的广播用于监听系统事件或应用程序事件!android中的广播包括普通广播.有序广播以及异步广播(粘性广播)! 广播又有常驻型广播和非常驻型广播,常驻型广播是在xml中进行注册的,当应用程序关闭后,如果有对应的广播发送过来,广播接收器还是能够被激活:非常驻型广播是在代码中进行注册的,当应用程序关闭,广播也就取消了,我们可以在Activity中的onCreate或者onResume方法中注册广播,然后在onDestory或者onPaus

《Android深入透析》之广播(Broadcast)

摘要 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递.举一个大家都比较熟悉的例子来说明.在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频率的信号,然后大家通过将各自频率调成和电台相同的频率,就可以接受到广播内容了.在android中的广播其实是和这个是一样的效果的. 1.     概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递.举一个大家都比较熟悉的例子来说明.在车上的

Android Socket 发送广播包的那些坑

Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间.Android与手环等智能硬件之间.Android与Windows电脑之间等等. 本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法. 首先给出一段Android发送广播包的示例代码: DatagramSocket socket = new DatagramSocket(8000); socke

Android笔记(二十六) Android中的广播——BroadcastReceiver

什么是广播? 为了方便进行系统级别的消息通知,Android有一套类似广播的消息机制,每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能是来自于系统,也可能是来自于其他程序. 广播可以分为两种类型:有序广播和标准广播 标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因为它们之间没有任何先后顺序可言,这种广播的效率会比较高,但同时也意味着它是无法被截断的 如上图所示,每个人都代表一个广播接收器

【Android的从零单排开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver

广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都可以通过广播来通知用户.要做比喻的话,广播就像是我们的感官,能够有效且快速的从外界获取信息来反馈给自身. 一.广播的功能和特征 广播的生命周期很短,经过 调用对象—实现onReceive—结束 整个过程就结束了.从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码