本讲内容: Broadcast Receiver 的使用
1、Broadcast Receiver简介
2、Broadcast Receiver接收系统自带的广播
3、自定义广播
一、Broadcast Receiver简介
Android中的四大组件是 Activity、Service、Broadcast和Content Provider。而Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其作出反应的机制。
二、Broadcast Receiver接收系统自带的广播
我们做一个例子,功能是在系统启动时播放一首音乐。
1、建立一个项目Lesson21_BroadcastReceiver,拷贝一首音乐进res/raw目录
2、建立HelloBroadcastReceiver.java 内容如下:
  1. package android.basic.lesson21;


  2. import android.content.BroadcastReceiver;

  3. import android.content.Context;

  4. import android.content.Intent;

  5. import android.media.MediaPlayer;

  6. import android.util.Log;


  7. public class HelloBroadReciever extends BroadcastReceiver {


  8.        //如果接收的事件发生

  9.        @Override

  10.        public void onReceive(Context context, Intent intent) {

  11.                //则输出日志

  12.                Log.e("HelloBroadReciever", "BOOT_COMPLETED!!!!!!!!!!!!!!!!!!!!!!!!!");

  13.                Log.e("HelloBroadReciever", ""+intent.getAction());


  14.                //则播放一首音乐

  15.                MediaPlayer.create(context, R.raw.babayetu).start();

  16.        }

  17. }


3、在AndroidManifest.xml中注册此Receiver :
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/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="android.intent.category.LAUNCHER">

  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. package android.basic.lesson21;


  2. import android.app.Activity;

  3. import android.content.Intent;

  4. import android.os.Bundle;

  5. import android.view.View;

  6. import android.widget.Button;


  7. public class MainBroadcastReceiver extends Activity {

  8.        /** Called when the activity is first created. */

  9.        @Override

  10.        public void onCreate(Bundle savedInstanceState) {

  11.                super.onCreate(savedInstanceState);

  12.                setContentView(R.layout.main);


  13.                Button b1 = (Button) findViewById(R.id.Button01);


  14.                b1.setOnClickListener(new View.OnClickListener() {


  15.                        @Override

  16.                        public void onClick(View v) {

  17.                                //定义一个intent

  18.                                Intent intent = new Intent().setAction(

  19.                                                "android.basic.lesson21.Hello").putExtra("yaoyao",

  20.                                                "yaoyao is 189 days old ,27 weeks -- 2010-08-10");

  21.                                //广播出去

  22.                                sendBroadcast(intent);

  23.                        }

  24.                });

  25.        }

  26. }



6、更改 HelloBroadReceiver.java 内容如下:
  1. package android.basic.lesson21;


  2. import android.content.BroadcastReceiver;

  3. import android.content.Context;

  4. import android.content.Intent;

  5. import android.media.MediaPlayer;

  6. import android.util.Log;


  7. public class HelloBroadReciever extends BroadcastReceiver {


  8.        //如果接收的事件发生

  9.        @Override

  10.        public void onReceive(Context context, Intent intent) {

  11.                //对比Action决定输出什么信息

  12.                if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){

  13.                        Log.e("HelloBroadReciever", "BOOT_COMPLETED !!!!!!!!!!!!!!!!!!!!!!!!!");

  14.                }


  15.                if(intent.getAction().equals("android.basic.lesson21.Hello")){

  16.                        Log.e("HelloBroadReciever", "Say Hello to Yaoyao !!!!!!!!!!!!!!!!!!!!!!!!!");

  17.                        Log.e("HelloBroadReciever", intent.getStringExtra("yaoyao"));

  18.                }


  19.                //播放一首音乐

  20.                MediaPlayer.create(context, R.raw.babayetu).start();

  21.        }

  22. }


7、更改 AndroidManifest.xml 内容如下:
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/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="android.intent.category.LAUNCHER">

  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.             &nbs