BroadcastReceiver的用法
- 格式:doc
- 大小:590.50 KB
- 文档页数:10
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()函数执行完毕后,就立刻删掉该对象,下一次再收到此广播后,又会创建一个新的对象。