BroadcastReceiver广播接收者

合集下载

安卓的四大组件

安卓的四大组件

安卓的四⼤组件Android四⼤基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver⼴播接收器。

⼀:了解四⼤基本组件Activity :应⽤程序中,⼀个Activity通常就是⼀个单独的屏幕,它上⾯可以显⽰⼀些控件也可以监听并处理⽤户的事件做出响应。

Activity之间通过Intent进⾏通信。

在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。

典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。

⽽动作对应的数据则以URI 的形式进⾏表⽰。

例如:要查看⼀个⼈的联系⽅式,你需要创建⼀个动作类型为VIEW 的intent,以及⼀个表⽰这个⼈的URI。

与之有关系的⼀个类叫IntentFilter。

相对于intent 是⼀个有效的做某事的请求,⼀个intentfilter 则⽤于描述⼀个activity(或者IntentReceiver)能够操作哪些intent。

⼀个activity 如果要显⽰⼀个⼈的联系⽅式时,需要声明⼀个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表⽰⼀个⼈的URI。

IntentFilter 需要在AndroidManifest.xml 中定义。

通过解析各种intent,从⼀个屏幕导航到另⼀个屏幕是很简单的。

当向前导航时,activity 将会调⽤startActivity(Intent myIntent)⽅法。

然后,系统会在所有安装的应⽤程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。

新的activity 接收到myIntent 的通知后,开始运⾏。

当startActivity ⽅法被调⽤将触发解析myIntent 的动作,这个机制提供了两个关键好处:A、Activities 能够重复利⽤从其它组件中以Intent 的形式产⽣的⼀个请求;B、Activities 可以在任何时候被⼀个具有相同IntentFilter 的新的Activity 取代。

Android 应用程序的基本组件

Android 应用程序的基本组件

Android 应用程序的基本组件Android 操作系统是目前世界上最流行的移动操作系统之一。

它提供了广泛的应用程序开发工具和框架,使开发者能够轻松地创建出丰富多样的应用程序。

而这些应用程序的基础是由一些基本组件构成的。

本文将介绍 Android 应用程序的基本组件,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。

活动(Activity)是 Android 应用程序的核心组件之一。

它代表了用户与应用程序之间的交互界面。

每个 Android 应用程序都至少包含一个活动,而活动可以包含多个界面元素,例如按钮、文本框、图像等。

活动通过布局文件定义了界面的外观和布局,通过代码来处理用户的操作和响应。

活动之间可以通过意图(Intent)来进行切换和通信,从而实现应用程序之间的流转和交互。

服务(Service)是在后台运行的组件,它可以在没有用户界面的情况下执行长时间运行的操作。

服务通常用于执行一些独立的任务,例如播放音乐、下载文件等。

通过在应用程序中创建服务,开发者可以在用户不可见的情况下执行一些必要的操作,并提供持久性的后台功能。

广播接收器(Broadcast Receiver)是一种用于接收系统广播消息的组件。

广播是 Android 系统中不同组件之间进行通信的一种方式,例如设备启动完成、电池电量变化等。

通过注册一个广播接收器,开发者可以监听和响应系统广播消息,并执行相应的操作。

广播接收器可以用于实现各种功能,例如接收短信、接收网络状态变化等。

内容提供器(Content Provider)是 Android 中用于共享数据的一种机制。

内容提供器允许一个应用程序将其数据暴露给其他应用程序。

通过内容提供器,不同的应用程序可以相互访问和共享数据,实现数据的交互和共用。

例如,系统提供的联系人数据库就是通过内容提供器来共享和访问联系人数据的。

BroadcastReceiver的用法

BroadcastReceiver的用法

BroadcastReceiver(广播接收器)是Android中的四大组件之一。

下面是Android Doc中关于BroadcastReceiver的概述:①广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。

很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。

应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。

②应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。

所有的接收器均继承自BroadcastReceiver基类。

③广播接收器没有用户界面。

然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。

通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。

一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

Android中的广播事件有两种,一种就是系统广播事件,比如:ACTION_BOOT_COMPLETED (系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。

另外一种是我们自定义的广播事件。

广播事件的流程①注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。

两种方式都需要IntentFIlter。

②发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。

③接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。

Android深入探究笔记之二十 -- 广播接收者

Android深入探究笔记之二十 -- 广播接收者

Android深入探究笔记之二十-- 广播接收者,BroadcastReceiver 收藏1. 概述广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。

普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。

然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。

如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。

优先级别声明在intent-filter 元素的android:priority 属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置。

有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。

另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。

Context.sendBroadcast()发送的是普通广播,所有订阅者都有机会获得并进行处理。

Context.sendOrderedBroadcast()发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。

对于有序广播,前面的接收者可以将数据通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复BroadcastReceiver和startActivity之间的关系和使用方法引言:在Android开发中,BroadcastReceiver(广播接收器)和startActivity (启动活动)是两个重要的组件。

BroadcastReceiver用于接收和处理来自系统或应用程序发送的广播消息,而startActivity用于启动新的Activity。

本文将逐步介绍BroadcastReceiver和startActivity之间的关系及其使用方法。

一、BroadcastReceiver的概述BroadcastReceiver是一个全局的组件,用于接收和处理来自系统或应用程序发送的广播消息。

它能够在后台运行,监听指定的广播事件,并根据接收到的广播消息执行相应的操作。

例如,当手机接收到短信时,系统会发送一个SMS_RECEIVED的广播消息,我们可以通过注册一个BroadcastReceiver来接收并处理该消息。

二、startActivity的概述startActivity用于启动一个新的Activity。

它可以用于从一个Activity跳转到另一个Activity,实现页面之间的切换和交互。

通过startActivity,我们可以传递额外的数据给新启动的Activity,从而在不同的Activity之间传递和共享数据。

三、BroadcastReceiver和startActivity的关系1. BroadcastReciever的触发条件首先,BroadcastReceiver可以在系统或应用程序发送广播消息时被触发。

可以通过注册一个BroadcastReceiver来监听指定的广播事件,只有当该事件发生时,BroadcastReceiver才能收到相应的广播消息并执行相应的操作。

2. BroadcastReceiver启动Activity在BroadcastReceiver的onReceive()方法中,我们可以使用startActivity 方法来启动一个新的Activity。

BroadcastReceiver种类及介绍

BroadcastReceiver种类及介绍

广播类型及广播的收发 (1)广播类型: (1)广播的收发: (1)普通广播的发送和接收: (1)有序广播的发送和接收: (2)异步广播的发送和接收: (2)BroadCastReceiver 源码位于:framework/base/core/java/android.content.BroadcastReceiver.java广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。

通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。

广播是一种广泛运用的在应用程序之间传输信息的机制。

而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件;广播类型及广播的收发广播类型:普通广播(Normalbroadcasts)发送一个广播,所以监听该广播的广播接收者都可以监听到改广播。

异步广播当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播.有序广播(Orderedbroadcasts)按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容.广播的收发:普通广播的发送和接收:sendBroadcast(intent);< receiver android:name = ".MyBroadcastReceiver" >< intent-filter android:priority = "1000" >< action android:name = "cn.lenovo.yangguangfu" /></ intent-filter ></ receiver >Priority:1,他决定该广播的级别,级别数值是在-1000到1000之间,值越大,优先级越高;2,同级别接收时先后是随机的;再级别低的收到广播;3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;4,不能截断广播的继续传播,5,实验现象,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复「BroadcastReceiver.startActivity」:激活Activity的广播接收器引言:在移动应用开发中,我们经常会遇到需要在不同组件之间进行通信的情况。

广播接收器(BroadcastReceiver)是Android平台中一种很常用的组件,它可以接收来自系统或其他应用程序发出的广播消息,并根据其定义的逻辑做出相应的操作。

在这篇文章中,我们将重点讨论如何使用BroadcastReceiver来激活(startActivity)一个Activity。

一、什么是广播接收器(BroadcastReceiver)?广播接收器是Android平台的一种组件,用于接收并响应广播消息。

广播消息可以来自系统(如电池电量低等)或其他应用程序(如发送一个自定义广播)。

广播接收器可以在AndroidManifest.xml文件中声明,也可以使用动态注册的方式创建。

当接收到匹配的广播消息时,广播接收器会调用其onReceive()方法进行相应的操作。

二、为什么要使用广播接收器?广播接收器是实现应用程序间通信的一种重要方式。

通过发送和接收广播消息,应用程序可以在不同的组件之间传递数据或进行相应的操作。

例如,当手机的电池电量过低时,系统会发送一个电池低电量的广播消息,应用程序可以通过监听该广播消息来做出相应的处理,如关闭耗电较高的功能或提醒用户充电。

三、激活Activity的意义和使用场景。

在某些特定的场景下,我们可能需要在接收到广播消息时激活一个特定的Activity。

例如,当接收到来自其他应用程序的广播消息,通知用户有新消息,我们可以通过激活一个显示新消息的Activity来提醒用户并处理相关逻辑。

四、如何使用广播接收器激活Activity?下面将一步一步详细介绍如何使用广播接收器激活Activity:1. 创建一个自定义的广播接收器类我们首先需要创建一个继承自BroadcastReceiver的自定义类。

Broadcast Receiver

Broadcast Receiver

BroadcastReceiver
通常一个BroadcastReceiver对象的生命周期不超过5秒,所以在 BroadcastReceiver里不能做一些比较耗时的操作,如果需要完成一项比较耗 时的工作,可以通过发送Intent给Activity或Service,由Activity或Service来完 成。 public class IncomingSMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {
//发送Intent启动服务,由服务来完成比较耗时的操作 Intent service = new Intent(context, XxxService.class); context.startService(service); //发送Intent启动Activity,由Activity来完成比较耗时的操作 Intent newIntent = new Intent(context, XxxActivity.class); context.startActivity(newIntent);
(2)代码动态注册 (根据自己的需要进行注册,销毁)
如果一个BrodcastReceiver用于更新UI,那么通常会使用这种方发注册, 在Activity启动时注册BrodcastReceiver ,在Activity不可见时取消
@Override protected void onStart() { super.onStart(); //实例化过滤器并设置要过滤的广播 IntentFilter filter = new IntentFilter(BROADCAST) //注册广播 registerReceiver(new MyReceiver(), filter);}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广播接收者BroadcastReceiver已有 86 次阅读2011-5-16 22:34|个人分类:Android广播接收者:①是用来接收广播Intent的②一个广播Intent是可以被多个订阅了此广播的广播接收者所接收广播又可以分为“普通广播”和“有序广播”普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,优点效率比较高,缺点接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。

有序广播是按照接收者声明的优先级别,被接收者依次接收广播。

如:A的级别高于B,B 的级别高于C,那么,广播首先传给A,再传给B,最后传给C 。

优先级别在<intent-filter>的android:priority属性中声明,数值越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置。

有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。

另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。

广播Intent的发送是通过调用下面两个函数之一来实现的Context.sendBroadcast()发送的是普通广播,所有订阅者都有机会获得并进行处理。

Context.sendOrderedBroadcast()发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。

对于有序广播,前面的接收者可以将数据通过setResultExtras(Bundle)方法存放进结果对象,然后传给下一个接收者,下一个接收者通过代码:Bundle bundle = getResultExtras(true))可以获取上一个接收者存入在结果对象中的数据。

如发送有序广播:Intent bcItent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL);bcItent.putExtra(Intent.EXTRA_PHONE_NUMBER, phoneNum);Demo实现方式①继承BroadcastReceiver,如MyBroadcastReceiver,同时要在AndroidManifest.xml中注册,application节点下<receiver android:name=".MyBroadcastReceiver">,再重写MyBroadcastReceiver的onReceive(),本函数会在一旦接受到了订阅的广播时就会执行②订阅需求Intent两种方式a)代码订阅如IntentFilter inFilter= newIntentFilter("android.intent.action.BOOT_COMPLETED");//开机启动的广播Intent MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();//当前继承BroadcastReceiver的对象registerReceiver(myReceiver, inFilter);b)AndroidManifest.xml中订阅,如下intent-filter节点下<receiver android:name=".BroadcastReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver>其他广播Intent如<action android:name="android.intent.action.BATTERY_CHANGED"/>电池电量变化广播Intent<action android:name="android.provider.Telephony.SMS_RECEIVED"/>短信<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>电话。

注意:在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive() 方法,onReceive() 方法执行完后,BroadcastReceiver 的实例就会被销毁。

当onReceive() 方法在10秒内没有执行完毕,Android会认为该程序无响应。

所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR (Application No Response)的对话框。

如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。

这里不能使用子线程来解决,因为BroadcastReceiver 的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。

BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。

如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。

所以采用子线程来解决是不可靠的。

BroadCastReceiver 简介(末尾有源码)BroadCastReceiver 源码位于:framework/base/core/java/android.content.BroadcastReceiver.java广播接收者(BroadcastReceiver )用于接收广播Intent ,广播Intent 的发送是通过调用Context.sendBroadcast() 、Context.sendOrderedBroadcast() 来实现的。

通常一个广播Intent 可以被订阅了此Intent 的多个广播接收者所接收。

广播是一种广泛运用的在应用程序之间传输信息的机制。

而BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件;来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。

BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后,BroadcastReceiver 可以启动Activity 作为响应,或者通过NotificationMananger 提醒用户,或者启动Service 等等。

BroadCastReceiver 的机制1. 机制在Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。

如图:2. 实现用接收短信举例:第一种方式:实现public class MyBroadcastReceiver extends BroadcastReceiver {// action名称String SMS_RECEIVED= "android.provider.Telephony.SMS_RECEIVED";public void onReceive(Context context, Intent intent) {if(intent.getAction().equals(SMS_RECEIVED)) {// 相关处理:地域变换、电量不足、来电来信;}}}系统注册:在AndroidManifest.xml 中注册<receiver android:name = ".MyBroadcastReceiver"><intent-filter android:priority = "1000"><action android:name = "android.provider.Telephony.SMS_RECEIVED"/> </intent-filter></receiver>当然了需要权限:<uses-permission android:name = "android.permission.RECEIVE_SMS"/><uses-permission android:name = "android.permission.SEND_SMS"/>第二种方式:// 广播接收者-广播的接收private BroadcastReceiver myBroadcastReceiver= new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {//相关处理,如收短信,监听电量变化信息}};代码中注册:IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED "); registerReceiver(mBatteryInfoReceiver, intentFilter);3. 生命周期描述了Android 中广播的生命周期,其次它并不像Activity 一样复杂,运行原理很简单如下图:生命周期只有十秒左右,如果在onReceive() 内做超过十秒内的事情,就会报错。

每次广播到来时, 会重新创建BroadcastReceiver 对象, 并且调用onReceive() 方法, 执行完以后, 该对象即被销毁. 当onReceive() 方法在10 秒内没有执行完毕,Android 会认为该程序无响应. 所以在BroadcastReceiver 里不能做一些比较耗时的操作, 否侧会弹出ANR(Application No Response) 的对话框. 。

相关文档
最新文档