Android BroadcastReceiver详解

合集下载

android开发 广播接收者 短信拦截 电话拦截 发送广播

android开发 广播接收者 短信拦截 电话拦截 发送广播

目录广播接收者(BroadcastReceiver) (1)什么是广播接收器 (1)广播接收者的特性 (1)广播的分类(优先级) (2)设置优先级别 (2)发送广播 (3)广播的中断:不再向下传递广播 (3)短信拦截器: (3)拨号拦截器: (4)广播接收者(BroadcastReceiver)什么是广播接收器广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。

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

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

广播接收者的特性1.一个广播接收者只能接收一个广播,一个广播可以被多个广播接收者接收.2.广播接收者之间通过Intent的action来区分接收的是哪些广播.3.广播接收者BroadcastReceiver不需要显示调用启动,由系统调用.4.每次广播消息到来时都会创建BroadcastReceiver实例,然后调用onReceiver()方法,onReceive() 方法执行完后,BroadcastReceiver 的实例就会被销毁.5.当onReceive() 方法在10秒内没有执行完毕,Android会认为该程序无响应,弹出ANR错误对话框.6.不要在广播接收者中创建子线程来执行耗时操作,不可靠.在广播接收者中不应该执行耗时的操作、如果有耗时操作需要创建服务、由服务来执行耗时操作.7. 如果在广播接收者或服务中启动Activity,需要对意图进行如下设置。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);为什么此处要进行使用一个新的任务栈?在系统调用广播的时候,有可能还没有执行Activity,不存在任务栈,所以要使用这个flag. 广播的分类(优先级)普通广播(Normal broadcasts):完全异步,可以同时被所有接收者接收到有序广播(Ordered broadcasts):按照接收者声明的优先级别,被接收者依次接收广播.普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。

Android BroadcastReceiver

Android BroadcastReceiver

BroadcastReceiver 用于异步接收广播Intent。

主要有两大类,用于接收广播的:∙正常广播 Normal broadcasts(用Context.sendBroadcast()发送)是完全异步的。

它们都运行在一个未定义的顺序,通常是在同一时间。

这样会更有效,但意味着receiver不能包含所要使用的结果或中止的API。

∙有序广播 Ordered broadcasts(用Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。

所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播——不传播给其他receiver。

而receiver运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。

要注意的是,即使是Normal broadcasts,系统在某些情况下可能会恢复到一次传播给一个receiver。

特别是receiver可能需要创建一个进程,为了避免系统超载,只能一次运行一个receiver。

Broadcast Receiver 并没有提供可视化的界面来显示广播信息。

可以使用Notification和Notification Manager来实现可视化的信息的界面,显示广播信息的内容,图标及震动信息。

生命周期一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。

因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有过于耗时的操作,不能使用线程来执行。

对于耗时的操作,请start service来完成。

因为当得到其他异步操作所返回的结果时,BroadcastReceiver 可能已经无效了。

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对象传给它。

BroadcastReceiver广播接收者

BroadcastReceiver广播接收者

广播接收者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))可以获取上一个接收者存入在结果对象中的数据。

broadcastreceiver 超过10s

broadcastreceiver 超过10s

broadcastreceiver 超过10s BroadcastReceiver是Android中一种重要的组件,用于接收系统广播和其他应用程序发送的广播消息。

然而,根据Android官方文档的要求,BroadcastReceiver的onReceive()方法应尽量避免执行耗时操作,以免引起ANR(Application Not Responding)错误。

在本文中,我将逐步解释为什么BroadcastReceiver的执行时间应该控制在10秒以内,并介绍处理长时间操作的方法。

首先,让我们来了解一下为什么BroadcastReceiver的执行时间应该被限制在10秒以内。

在Android系统中,BroadcastReceiver是在主线程中运行的,而主线程负责处理用户界面和用户交互。

如果BroadcastReceiver的执行时间过长,就会导致主线程阻塞,用户界面将无法响应用户的操作,从而使整个应用程序变得不可用。

为了避免这种情况的发生,Android系统设置了一个超时时间,即10秒。

那么,当我们的BroadcastReceiver需要执行一些耗时操作时该怎么办呢?Android提供了一种解决方案,即使用JobScheduler或者后台服务来处理耗时操作。

JobScheduler是Android 5.0引入的一个API,它可以用来处理一些需要较长时间才能完成的任务,而不会阻塞主线程。

与JobScheduler相比,后台服务是一个更早的解决方案,它允许应用程序在后台执行一些任务,而不会受到BroadcastReceiver超时限制的影响。

接下来,让我们详细介绍如何使用JobScheduler来处理BroadcastReceiver中的耗时操作。

首先,我们需要在AndroidManifest.xml文件中注册一个JobService组件,用于处理我们的耗时任务。

然后,在BroadcastReceiver的onReceive()方法中,我们可以使用JobScheduler来启动一个Job,以执行耗时操作。

Android中的广播(BroadCast)详细介绍

Android中的广播(BroadCast)详细介绍

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注册的接收者不管你的程序有没有启动有会起作⽤。

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 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);}

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复在Android中,BroadcastReceiver和startActivity是两个常用的组件和方法,对于开发者来说,深入研究它们的用法和原理是至关重要的。

因此,本文将详细探讨BroadcastReceiver和startActivity的相关内容,通过一步一步的回答来帮助读者理解和应用这两个核心概念。

首先,我们来了解BroadcastReceiver是什么?简而言之,BroadcastReceiver是一种用于接收和处理广播信息的组件。

它可以监听和响应系统广播或自定义广播,以执行相关的操作。

比如,当手机接收到新短信时,可以注册一个BroadcastReceiver来监听系统发出的SMS_RECEIVED广播,并在其接收到广播时触发相应的逻辑。

接下来,我们来探讨如何使用BroadcastReceiver。

首先,需要创建一个继承自BroadcastReceiver的类,并重写其onReceive()方法。

这个方法会在广播事件被接收到时被自动调用。

在onReceive()方法中,我们可以编写逻辑来处理广播事件,比如显示一个通知、启动一个服务或者执行其他操作。

为了使BroadcastReceiver能够接收广播事件,还需要在AndroidManifest.xml文件中进行相应的声明和配置。

在<application>标签下添加一个<receiver>标签,并设置receiver的名称、过滤器和权限等属性。

通过设置过滤器,可以指定BroadcastReceiver要监听的广播类型,以及处理特定类型的广播事件。

除了监听系统广播,我们还可以发送自定义广播来触发BroadcastReceiver。

在应用程序的其他组件中,通过调用sendBroadcast()方法来发送自定义广播,并通过设置Intent的action属性来指定广播的类型。

广播机制BroadcastReciVer

广播机制BroadcastReciVer

小引:广播,四大组件之一。

BroadcastReciver:跟我们生活中的广播类似,频道,发送者,接收者,一:概念:1..BroadCastReciver:是Android中四大组件之一,2..没有可以显示的界面,3:.BroadcastReciver包括两个概念,分别是广播发送者,和广播接收者4:程序可以自己发送广播自己接收,也可以接收系统或者其他应用程序的广播二:声明周期:1,..onReceive:该函数执行之后广播的声明周期就结束了2…onRecivie默认在主线程中执行所以不能在该方法中做比较耗时的操作,三:广播的类型:无序广播,有序广播1:无序广播:接受者之间没有任何关系,发送者直接发送给若干接收者2:使用sendBrodcast发送,无序并且不可中断的,彼此之间不被第三方因素中断参数:Intent,该intent的作用就是从哪里发送到哪里,实例化一个intent对象参数是;上下文参数,和发送广播到哪里。

另外如果在清单文件中定义了一个action动作,那么就创建另外一个intent这里面的参数就是String,就是清单文件中action的动作。

工作原理就是发送完广播之后到清单文件中找action动作与intent参数相同的那个类,如果相同那么就能够接受到广播。

另外Intent除了这种方式添加action动作之外,还可以用无参构造方法实例化intent并用该对象调用setAction()方法,将action动作的字符串放进去就可以。

3:广播时可以设置接收者权限仅当有权限的时候才有权限也就是频道对了才会有权限4:有序广播:一个传一个,发送者给接送者A,接送者A在给接送者B……..优先级,先接收到的优先级高,也就是说优先级越高接收的越贴近发送者,优先级高的可以中断优先级低的。

5:使用sendorderBrodcast发送,参数第二个为权限可以暂时不用,在该方法中参数也是Intent,另外一个是权限暂且可以不用,7:优先级设置,在清单文件中<intent-filter>中定义的android:priority(优先级的意思)属性设置,数字越大优先级越高,,其中有序广播在意图控制器里面设置优先级关键词是priority,优先级的范围是1到1000 8:被各个接受者逐步接收,优先级高的可以停止广播也可以添加数据给先一个接受者。

BroadcastReceiver的原理和使用

BroadcastReceiver的原理和使用

BroadcastReceiver的原理和使⽤使⽤中注意的⼏点⼀、1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver⽐在代码中⽤registerReceiver动态注册的优先级要低。

发送⽅在sendBroadcast后,ActivityManagerService⾥的broadcastIntentLocked函数会处理⼴播的接收者。

静态注册的接收者存在⼀张表⾥,动态注册的接收者存在另⼀张表,AM S会将两个表合并,按⼴播的优先级排序,如果优先级相同,动态的排在前⾯。

这样动态注册的receiver会先收到⼴播。

静态注册的receiver可以⽤android:priority属性来设置接收⼴播的优先级,这是个4字节整型值,越⼤优先级越⾼。

因为int型范围是2^31-1到2^31,所以要设置最⼤的优先级,在intent-filte r标签⾥可写为android:priority="2147483647"。

如果都是动态注册、并且优先级也相同的两个receiver,在broadcastIntentLocked内部会并⾏地向两个receiver发出Intent。

2.有序⼴播有序⼴播是⽤sendOrderedBroadcast来发送。

⾼优先级的接收者会先接收到⼴播,然后它可以决定是否继续转发,让低优先级的接收者接收到,或者终⽌⼴播。

⾼优先级的接收者可以通过s etResult把⼀些信息传给下⼀个接收者,下⼀个接收者则通过getResult获取上⼀个接收者传过来的信息。

这个优先级也是⽤android:priority来设置,范围是-1000到1000。

3.sendStickyBroadcastSticky的意思是即使没有接收者,发送的⼴播Intent也会⼀直驻留在系统中,⼀旦有receiver 注册,就会⽴即收到之前发送的⼴播。

发送这个⼴播的应⽤需要权限<uses-permissionandroid: name="android.permission.BROADCAST_STICKY" />如果sendStickyBroadcast发了多个⼴播,但暂时没有接收者,系统会保留最后⼀条⼴播。

broadcastreceiver详解

broadcastreceiver详解

BroadcastReceiver(广播接收器)是Android系统中非常重要的组件之一,它允许应用程序在系统范围内或应用内接收并响应广播消息。

广播消息可以来自系统(如系统启动完成、网络状态变化等)或应用内部(如应用内部组件发出的广播)。

接收到广播消息后,BroadcastReceiver可以启动服务、启动Activity或执行其他操作。

1. BroadcastReceiver的注册和使用在AndroidManifest.xml文件中注册BroadcastReceiver,声明需要监听的广播消息。

同时也可以通过代码方式注册BroadcastReceiver,这种方式更加灵活,可以动态注册和注销Receiver。

```<receiverandroid:name=".MyBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED" /><actionandroid:name=".conn.CONNECTIVITY_CHANGE" /> </intent-filter></receiver>```在BroadcastReceiver中重写onReceive()方法处理接收到的广播消息。

```public class MyBroadcastReceiver extends BroadcastReceiver { Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {// 处理系统启动完成广播} else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { // 处理网络状态变化广播}}}```2. 广播消息的分类广播消息可以分为普通广播、有序广播和粘性广播。

android localbroadcastreceiver 原理

android localbroadcastreceiver 原理

android localbroadcastreceiver 原理一、概述LocalBroadcastReceiver是Android系统中的一个重要组件,用于接收本地广播的Intent消息,从而实现应用程序之间的通信。

LocalBroadcastReceiver的工作原理是通过系统广播中心,将接收到的Intent消息传递给注册了该BroadcastReceiver的应用程序。

二、工作原理1. 广播中心:Android系统中的广播中心负责接收来自各个应用程序的Intent消息,并根据消息的内容进行分类和传递。

广播中心会将接收到的Intent消息存储在内存中,以便快速传递给注册了BroadcastReceiver的应用程序。

2. 注册与注销:应用程序需要使用Context.registerReceiver()方法注册自己的BroadcastReceiver,以便接收本地广播的Intent消息。

当应用程序不再需要接收广播时,可以使用Context.unregisterReceiver()方法注销BroadcastReceiver。

3. 接收Intent消息:当注册了BroadcastReceiver的应用程序接收到广播中心的Intent消息时,该BroadcastReceiver会被触发执行相应的操作。

BroadcastReceiver可以是一个类,也可以是一个匿名内部类,用于处理接收到的Intent消息。

4. 消息处理:BroadcastReceiver通过onReceive()方法处理接收到的Intent消息。

在该方法中,可以根据Intent的内容执行相应的操作,例如更新UI、发送异步请求等。

三、应用场景LocalBroadcastReceiver在Android应用程序中应用广泛,主要适用于以下场景:1. 应用程序之间的通信:当一个应用程序需要向另一个应用程序发送消息时,可以使用LocalBroadcastReceiver实现。

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复

broadcastreceiver startactivity -回复广播接收器(BroadcastReceiver)是Android中非常重要的组件之一,它允许应用接收和响应系统级别的广播消息。

在某些情况下,我们可能需要在接收到广播消息后启动一个Activity来执行相应的操作。

本文将详细讨论如何使用BroadcastReceiver启动一个Activity。

首先,让我们来了解一下广播接收器的基本概念。

广播接收器用于接收系统或其他应用发送的广播消息,并根据消息的类型和内容进行相应的处理。

广播接收器分为静态注册和动态注册两种方式。

静态注册是通过在应用的AndroidManifest.xml文件中声明广播接收器来完成的。

这种方式通常用于接收系统广播消息,并在应用启动时自动注册。

例如,我们可以声明一个接收网络变化广播消息的广播接收器,以便在网络状态发生变化时更新应用界面。

动态注册是通过代码方式在应用中注册广播接收器的方式。

这种方式通常用于接收自定义广播消息,并根据需要注册和注销广播接收器。

例如,我们可以在应用中注册一个自定义广播接收器,以便接收来自其他应用的特定广播消息。

接下来,我们将详细介绍如何在接收到广播消息时启动一个Activity。

第一步,创建一个广播接收器类。

我们可以通过继承BroadcastReceiver 类并重写其onReceive()方法来创建一个自定义的广播接收器。

在onReceive()方法中,我们可以编写相应的代码来处理接收到的广播消息。

javapublic class MyBroadcastReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) {在这里编写处理广播消息的代码启动Activity的代码将在下一步中添加}}第二步,编写启动Activity的代码。

broadcastreceiver 延迟

broadcastreceiver 延迟

broadcastreceiver 延迟详解在Android开发中,`BroadcastReceiver` 是一种用于接收系统广播和应用内自定义广播的组件。

当应用程序的状态发生变化,或者系统事件发生时,`BroadcastReceiver` 可以捕捉这些广播,并执行相应的操作。

关于"广播接收器的延迟" 的问题可能涉及到不同方面的讨论。

以下是一些可能导致`BroadcastReceiver` 响应延迟的原因:1. 后台执行:如果应用程序在后台运行,系统可能会推迟`BroadcastReceiver` 的执行,以减少对设备性能和电池寿命的影响。

在后台执行的应用可能会受到一些限制,这可能导致广播接收器的延迟。

2. 系统负载:如果系统当前处于高负载状态,例如处理大量后台任务或者其他活动,系统可能会推迟执行`BroadcastReceiver` 以确保资源的有效分配。

3. 优先级:`BroadcastReceiver` 可以通过在清单文件中声明`<intent-filter>` 元素并设置`android:priority` 属性来指定其接收广播的优先级。

如果多个广播接收器都能够处理同一广播,系统将按照它们的优先级来确定哪个接收器将首先收到广播。

因此,优先级较低的接收器可能会在优先级较高的接收器之后被执行。

4. 网络延迟:如果`BroadcastReceiver` 中的操作涉及到网络请求,网络延迟可能会导致`BroadcastReceiver` 的执行受到影响。

5. 电量低:当设备电量较低时,系统可能会推迟一些操作以延长电池寿命。

这可能会影响到`BroadcastReceiver` 的执行。

6. Doze 模式:在Android 6.0 及更高版本中,系统引入了Doze 模式,该模式下系统会将设备置于低功耗状态以延长电池寿命。

在Doze 模式下,一些后台任务可能会受到限制,包括广播的传递和`BroadcastReceiver` 的执行。

第6章 BroadcastReceiver(广播接收者)

第6章 BroadcastReceiver(广播接收者)

广播
• Android内置了很多系统级广播,例如手机开机后 会发送一条广播,电池电量不足时会发送一条广播 、我们的手机定制的闹钟等。
• Android系统提供了广播接收者,可以监听广播事件, 一个广播可以对应有多个接收者接收并进行处理。
BBrrooaaddccaassttRReecceeiivveerr11
……… } }
静态注册
• 当应用程序关闭后,如果接收到广播,那么该程序 会自动重新启动。常驻型广播在清单文件中注册。
• 例如:
<receiver
android:name=".MyReceiver" android:enable =“true“
android:exported =“true“> </receiver>
• 一种完全异步执行的广播,在广播发出去后,所有的广 播接收器几乎都会在同一时刻接收到这条广播消息。
• 发送无序广播时,广播接收器之间是没有先后顺序的。
广播接收器1
发出一条广播
广播接收器2
广播接收器3
2、有序广播
• 一种同步执行的广播,发出之后,同一时刻只有一个广 播接收器能够接收到这条消息。发送有序广播,广播接 收有先后顺序,并且可以被拦截。
案例—杀毒软件
• 有些软件一开机就会自动启动,在Android系统下也可 以实现这种功能,例如,手机一开机便会自动启动,这 种功能通过广播接收者监听开机启动的广播事件实现。
实现步骤
1.创建应用程序 2.编写界面交互代码 3.添加开机启动的广播接收者 4.注册广播并设置权限
AAnnddrrooiidd系系统统 ((产产生生事事件件))
BBrrooaaddccaassttRReecceeiivveerr22 BBrrooaaddccaassttRReecceeiivveerr33

android broadcastreceiver获取context -回复

android broadcastreceiver获取context -回复

android broadcastreceiver获取context -回复如何在Android的BroadcastReceiver中获取Context?在Android开发中,BroadcastReceiver是一种重要的组件,用于接收系统或应用发送的广播消息。

广播接收器可以监听并响应来自系统和其他应用程序的广播消息,以执行特定的操作。

在许多情况下,我们可能需要在BroadcastReceiver中获取Context,以便执行一些和上下文相关的操作。

本文将介绍如何在Android的BroadcastReceiver中获取Context,以及一些需要注意的问题。

一、什么是BroadcastReceiver?在开始讨论如何在BroadcastReceiver中获取Context之前,首先我们需要了解BroadcastReceiver的基本知识。

BroadcastReceiver是Android中的一种组件,用于接收和响应广播消息。

广播消息可以来自系统、其他应用程序或应用程序本身发送。

开发者可以注册BroadcastReceiver来接收指定类型的广播消息,并在接收到广播消息后执行相应的操作。

使用BroadcastReceiver可以实现一些常见的功能,比如接收来电通知、监听网络变化等等。

在Android中,系统已经定义了很多广播消息,开发者也可以自定义自己的广播消息。

二、BroadcastReceiver的工作机制在理解如何获取Context之前,我们需要了解BroadcastReceiver的工作机制。

当应用程序发送一个广播消息时,系统会根据广播消息的属性和注册的BroadcastReceiver来决定将广播消息传递给哪个BroadcastReceiver。

当BroadcastReceiver接收到广播消息时,它会调用onReceive() 方法来处理接收到的广播消息。

在onReceive() 方法中,开发者可以编写代码来处理广播消息,并执行相应的操作。

解析BroadcastReceiver之你需要了解的一些东东

解析BroadcastReceiver之你需要了解的一些东东

解析BroadcastReceiver之你需要了解的⼀些东东 前些天把四⼤组件之⼀的Service扯了⼀遍,今天就要开始谈谈它的弟兄BroadcastReceiver了。

写到这⾥我挺纠结的,因为⼴播接收者确实⽐较简单,但是各位就不要以为简单的就不内涵,也许我们慢慢探讨⼀下还能有另外⼀⽚天地。

惯例还是先会介绍⼀下基础的知识,后⾯会说说关于BroadcastReceiver的接收顺序还有其他的⼀些⼩知识。

BroadcastReceiver的作⽤主要是⽤来监听系统或者应⽤发出的⼴播信息,然后根据⼴播信息作为相应的逻辑处理;说通俗点其实上就是⼀种全局监听器,要来实现系统中不同组件之间的通信。

有时候也会⽤来作为传输少量⽽且发送频率低的数据,但是如果数据的发送频率⽐较⾼或者数量⽐较⼤就不建议⽤⼴播接收者来接收了,因为这样的效率很不好,因为BroadcastReceiver接收数据的开销还是⽐较⼤的。

我们先来看看⼴播接收者的代码,如下:1public class MyBroadcastReceiver extends BroadcastReceiver {2 @Override3public void onReceive(Context arg0, Intent arg1) {4// ⽤来实现⼴播接受者接收到⼴播后执⾏的代码逻辑5 }6 } 简单⽽完美,实现⼀个⼴播接受者仅仅需要我们重写⼀个函数onReceiver(),如果⼴播接受者接收到⼴播后将会执⾏该函数;但是这个前提是需要将这个⼴播接收者进⾏注册,⼀般来说,BroadcastReceiver的注册⽅式有且只有两种,⼀种是静态注册,另外⼀种是动态注册,⼴播接收者在注册后就开始监听系统或者应⽤之间发送的⼴播消息。

静态注册的⽅式:打开AndroidManifest清单⽂件中,像Activity、Service那种添加⼀个数据项进⾏注册,如下:<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <!-- action的命名规则⼀般建议为:包名.intent.类名 --> <action android:name="168.testBcr.intent.mybroadcastreceiver"/> </intent-filter></receiver> 静态注册的⼴播接收者就是⼀个常驻在系统中的全局监听器,也就是说如果你应⽤中配置了⼀个静态的BroadcastReceiver,⽽且你安装了应⽤⽽⽆论应⽤是否处于运⾏状态,⼴播接收者都是已经常驻在系统中了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android BroadcastReceiver 详解
Android BroadcastReceiver 详解
版本号
作者
更改内容
日期
A01
杜成见
初版发行
2017-9-25
1 / 17
Android BroadcastReceiver 详解
目录
前言 ............................................................................................................................................3 1. 2. 3. 广播的概念 ........................................................................................................................4 实现原理 ............................................................................................................................4 广播的类型 ........................................................................................................................5 3.1. 3.2. 3.3. 3.4. 4. 5. 普通广播(Normal Broadcast)............................................................................... 5 系统广播(System Broadcast) ............................................................................... 5 有序广播(Ordered Broadcast) ............................................................................. 6 App 应用内广播(Local Broadcast) ....................................................................... 7
1. 广播的概念
Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这 个广播,就知道系统产生了什么事件。 Android 系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发 短信、拨打电话、屏幕解锁
2. 实现原理

Android 中的广播使用了设计模式中的观察者模式:基于消息的发布/订 阅事件模型。 因此,Android 将广播的发送者 和 接收者 解耦,使得系统方便 集成,更易扩展
4 / 17
Android BroadcastReceiver 详解
寻找依据:IntentFilter / Permission 4. AMS 将广播发送到合适的广播接收者相应的消息循环队列中; 5. 广播接收者通过 消息循环 拿到此广播,并回调 onReceive() 特别注意:广播发送者 和 广播接收者的执行 是 异步 的,发出去的广播不会 关心有无接收者接收,也不确定接收者到底是何时才能接收到;
注:当使用系统广播时,只需要在注册广播接收者时定义相关的 action 即可, 并不需要手动发送广播,当系统有相关操作时会自动进行系统广播
3.3.
有序广播(Ordered Broadcast)
定义 发送出去的广播被广播接收者按照先后顺序接收 有序是针对广播接收者而言的 广播接受者接收广播的顺序规则(同时面向静态和动态注册的广播接受者)

模型中有 3 个角色: 1. 消息订阅者(广播接收者) 2. 消息发布者(广播发布者) 3. 消息中心(AMS,即 Activity Manager Service)
示意图

原理描述: 1. 广播接收者 通过 Binder 机制在 AMS 注册 2. 广播发送者 通过 Binder 机制向 AMS 发送广播 3. AMS 根据 广播发送者 要求,在已注册列表中,寻找合适的广播接 收者
BroadcastReceiver 的生命周期 .........................................................................................8 创建 BroadcastReceiver 的步骤 ........................................................................................9 5.1. 5.2. 创建 BroadcastReceiver 的子类 ................................................................................ 9 注册 BroadcastReceiver............................................................................................. 9
//发送广播
sendBroadcast(intent);
若被注册了的广播接收者中注册时 intentFilter 的 action 与上述匹配,则会接收此广 播(即进行回调 onReceive())。如下 mBroadcastReceiver 则会接收上述广播

若发送广播有相应权限,那么广播接收者也需要相应权限
3.2.
系统广播(System Broadcast)
Android 中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍 照等等),都会发出相应的广播
5 / 17
Android BroadcastReceiver 详解
每个广播都有特定的 Intent - Filter(包括具体的 action),Android 系统广播 action 如下:
3.4. App 应用内广播(Local Broadcast)




背景 Android 中的广播可以跨 App 直接通信(exported 对于有 intent-filter 情况下默认值为 true) 冲突 可能出现的问题: o 其他 App 针对性发出与当前 App intent-filter 相匹配的广播,由 此导致当前 App 不断接收广播并处理; o 其他 App 注册与当前 App 一致的 intent-filter 用于接收广播, 获 取广播具体信息; 即会出现安全性 & 效率性的问题。 解决方案 使用 App 应用内广播(Local Broadcast) 1. App 应用内广播可理解为一种局部广播,广播的发送者和接 收者都同属于一个 App。 2. 相比于全局广播 (普通广播) , App 应用内广播优势体现在: 安全性高 & 效率高 具体使用 1 - 将全局广播设置成局部广播 0. 注册广播时将 exported 属性设置为 false,使得非本 App 内部发 出的此广播不被接收;
3. 广播的类型
3.1. 普通广播(Normal Broadc的广播(最常用) 。发送广播使用如下:
Intent intent = new Intent();
//对应 BroadcastReceiver 中 intentFilter 的 action
intent.setAction(BROADCAST_ACTION);
系统操作 监听网络变化 关闭或打开飞行模式 充电时或电量发生变化 电池电量低 电池电量充足(即从电量低变化到饱 满时会发出广播 系统启动完成后(仅广播一次) 按下照相时的拍照按键(硬件按键)时 屏幕锁屏
action .conn.CONNECTIVITY_CHANGE Intent.ACTION_AIRPLANE_MODE_CHANGED Intent.ACTION_BATTERY_CHANGED Intent.ACTION_BATTERY_LOW Intent.ACTION_BATTERY_OKAY Intent.ACTION_BOOT_COMPLETED Intent.ACTION_CAMERA_BUTTON Intent.ACTION_CLOSE_SYSTEM_DIALOGS
6 / 17
Android BroadcastReceiver 详解
1. 按照 Priority 属性值从大-小排序; 2. Priority 属性相同者,动态注册的广播优先; 特点 1. 接收广播按顺序接收 2. 先接收的广播接收者可以对广播进行截断, 即后接收的广播接收者不再接 收到此广播; 3. 先接收的广播接收者可以对广播进行修改, 那么后接收的广播接收者将接 收到被修改后的广播 具体使用 有序广播的使用过程与普通广播非常类似,差异仅在于广播的发送方式: sendOrderedBroadcast(intent); 优先级的定义:-1000~1000 最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收 abortBroadCast:阻止其他接收者接收这条广播,类似拦截,只有有序广播 可以被拦截
2 / 17
Android BroadcastReceiver 详解
前言
ANDROID 四 大 控 件 之 BroadcastReceiver, 在 Android 开 发 中 ,
BroadcastReceiver 的应用场景非常多
相关文档
最新文档