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

registerreceiver 间隔问题: 什么是registerreceiver间隔?引言:在Android开发中,registerReceiver间隔是指在注册BroadcastReceiver时可以为其指定一个间隔时间来限制其接收广播的频率。
这样可以有效控制广播接收的频率,避免不必要的资源消耗和性能问题。
本文将一步一步对registerReceiver间隔进行解析和讨论。
一、概念解释1.1 BroadcastReceiver在Android中,BroadcastReceiver是一种用于接收和处理广播消息的组件。
它可以监听系统广播、自定义广播,或者在应用内发送广播消息。
当一个广播事件发生时,注册了对应BroadcastReceiver的应用组件将会收到该广播并执行相应的逻辑。
1.2 registerReceiverregisterReceiver是一个用于动态注册BroadcastReceiver的方法。
通过调用此方法,应用可以在运行时注册一个BroadcastReceiver。
这可以使应用能够接收到在注册后发送的广播消息。
通常,我们需要在合适的时机调用registerReceiver方法,以确保应用能够正确接收广播消息。
二、问题分析2.1 为什么需要registerReceiver间隔?有些情况下,我们希望控制BroadcastReceiver接收广播的频率,避免频繁触发和处理广播消息。
如果没有限制,当有大量广播消息发送时,应用可能会因为频繁的广播接收和处理而导致性能下降或资源消耗过高。
因此,registerReceiver间隔就成为了一种限制频率的手段。
2.2 registerReceiver间隔的原理是什么?registerReceiver间隔的原理是通过设置一个时间间隔,以确保相同类型的广播消息只有在一定时间间隔内才能被正常接收。
当第一次接收到广播消息后,我们可以记录下这个时刻,并在接下来的一段时间内屏蔽重复的广播消息。
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」:激活Activity的广播接收器引言:在移动应用开发中,我们经常会遇到需要在不同组件之间进行通信的情况。
广播接收器(BroadcastReceiver)是Android平台中一种很常用的组件,它可以接收来自系统或其他应用程序发出的广播消息,并根据其定义的逻辑做出相应的操作。
在这篇文章中,我们将重点讨论如何使用BroadcastReceiver来激活(startActivity)一个Activity。
一、什么是广播接收器(BroadcastReceiver)?广播接收器是Android平台的一种组件,用于接收并响应广播消息。
广播消息可以来自系统(如电池电量低等)或其他应用程序(如发送一个自定义广播)。
广播接收器可以在AndroidManifest.xml文件中声明,也可以使用动态注册的方式创建。
当接收到匹配的广播消息时,广播接收器会调用其onReceive()方法进行相应的操作。
二、为什么要使用广播接收器?广播接收器是实现应用程序间通信的一种重要方式。
通过发送和接收广播消息,应用程序可以在不同的组件之间传递数据或进行相应的操作。
例如,当手机的电池电量过低时,系统会发送一个电池低电量的广播消息,应用程序可以通过监听该广播消息来做出相应的处理,如关闭耗电较高的功能或提醒用户充电。
三、激活Activity的意义和使用场景。
在某些特定的场景下,我们可能需要在接收到广播消息时激活一个特定的Activity。
例如,当接收到来自其他应用程序的广播消息,通知用户有新消息,我们可以通过激活一个显示新消息的Activity来提醒用户并处理相关逻辑。
四、如何使用广播接收器激活Activity?下面将一步一步详细介绍如何使用广播接收器激活Activity:1. 创建一个自定义的广播接收器类我们首先需要创建一个继承自BroadcastReceiver的自定义类。
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 -回复在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属性来指定广播的类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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对象传给它。
onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
Broadcast Receiver接收系统自带的广播我们做一个例子,功能是在系统启动时播放一首音乐。
1、建立一个项目Lesson21_BroadcastReceiver,拷贝一首音乐进res/raw目录2、建立HelloBroadcastReceiver.java 内容如下:1.Codepackage android.basic.lesson21;2.3.import android.content.BroadcastReceiver;4.import android.content.Context;5.import android.content.Intent;6.import android.media.MediaPlayer;7.import android.util.Log;8.9.public class HelloBroadReciever extends BroadcastReceiver {10.11.//如果接收的事件发生12.@Override13.public void onReceive(Context context, Intent intent) {14.//则输出日志15.Log.e("HelloBroadReciever", "BOOT_COMPLETED!!!!!!!!!!!!!!!!!!!!!!!!!");16.Log.e("HelloBroadReciever", ""+intent.getAction());17.18.//则播放一首音乐19.MediaPlayer.create(context, R.raw.babayetu).start();20.}21.}3、在AndroidManifest.xml中注册此Receiver :1.Code<?xml version="1.0" encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"android:versionname="1.0" android:versioncode="1" package="android.basic.lesson21">3.<application android:icon="@drawable/icon" android:label="@string/app_name">4.<activity android:label="@string/app_name" android:name=".MainBroadcastReceiver">5.<intent -filter="">6.<action android:name="android.intent.action.MAIN">7.<category android:name="UNCHER">8.</category></action></intent>9.</activity>10.<!-- 定义Broadcast Receiver 指定监听的Action -->11.<receiver android:name="HelloBroadReciever">12.<intent -filter="">13.<action android:name="android.intent.action.BOOT_COMPLETED">14.</action></intent>15.</receiver>16.</application></manifest>4、发布程序,启动模拟器,可以在Logcat中看到:同时能听到音乐播放的声音。
说明我们确实接收到了系统启动的广播事件,并做出了响应。
三、自定义广播下面我们学习自己制作一个广播。
我们接着刚才的例子,继续写下去。
5、在MainBroadcastReceiver.java中填写如下代码:1.Codepackage android.basic.lesson21;2.3.import android.app.Activity;4.import android.content.Intent;5.import android.os.Bundle;6.import android.view.View;7.import android.widget.Button;8.9.public class MainBroadcastReceiver extends Activity {10./** Called when the activity is first created. */11.@Override12.public void onCreate(Bundle savedInstanceState) {13.super.onCreate(savedInstanceState);14.setContentView(yout.main);15.16.Button b1 = (Button) findViewById(R.id.Button01);17.18.b1.setOnClickListener(new View.OnClickListener() {19.20.@Override21.public void onClick(View v) {22.//定义一个intent23.Intent intent = new Intent().setAction(24."android.basic.lesson21.Hello").putExtra("yaoyao",25."yaoyao is 189 days old ,27 weeks -- 2010-08-10");26.//广播出去27.sendBroadcast(intent);28.}29.});30.}31.}6、更改HelloBroadReceiver.java 内容如下:1.Codepackage android.basic.lesson21;2.3.import android.content.BroadcastReceiver;4.import android.content.Context;5.import android.content.Intent;6.import android.media.MediaPlayer;7.import android.util.Log;8.9.public class HelloBroadReciever extends BroadcastReceiver {10.11.//如果接收的事件发生12.@Override13.public void onReceive(Context context, Intent intent) {14.//对比Action决定输出什么信息15.if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){16.Log.e("HelloBroadReciever", "BOOT_COMPLETED !!!!!!!!!!!!!!!!!!!!!!!!!");17.}18.19.if(intent.getAction().equals("android.basic.lesson21.Hello")){20.Log.e("HelloBroadReciever", "Say Hello to Yaoyao !!!!!!!!!!!!!!!!!!!!!!!!!");21.Log.e("HelloBroadReciever", intent.getStringExtra("yaoyao"));22.}23.24.//播放一首音乐25.MediaPlayer.create(context, R.raw.babayetu).start();26.}27.}7、更改AndroidManifest.xml 内容如下:1.<?xml version="1.0" encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"package="android.basic.lesson21" android:versionname="1.0" android:versioncode="1">3.<application android:icon="@drawable/icon" android:label="@string/app_name">4.<activity android:label="@string/app_name" android:name=".MainBroadcastReceiver">5.<intent -filter="">6.<action android:name="android.intent.action.MAIN">7.<category android:name="UNCHER">8.</category></action></intent>9.</activity>10.<!-- 定义Broadcast Receiver 指定监听的Action 这里我们的接收器,接收了2个Action,一个系统的一个我们自定义的-->11.<receiver android:name="HelloBroadReciever">12.<intent -filter="">13.<action android:name="android.intent.action.BOOT_COMPLETED">14.</action></intent>15.<intent -filter="">16.<action android:name="android.basic.lesson21.HelloYaoYao">17.</action></intent>18.19.</receiver>20.</application>21.<uses -sdk="" android:minsdkversion="8">22.</uses></manifest>8、运行程序,点击按钮,查看LogCat,听听声音在使用Broadcast 时我们应该注意到,BroadcastReceiver的子类别都是无状态的类别,每次收到发送广播事件后,BroadcastReceiver都会创建一个新的对象,然后再执行onReceive()函数,当onReceive()函数执行完毕后,就立刻删掉该对象,下一次再收到此广播后,又会创建一个新的对象。