Android学习指南之二十一:Broadcast Receiver 的使用

       如果说Activity和服务都是实干派,那么将Broadcast Receiver广播接收器组件定义为倾听者的角色是再恰当不过了。在Android平台中,广播接收器组件用于接收和响应系统广播的消息。与服务组件一样,广播接收器组件也需要通过Activity组件与用户进行交互。

       一、Broadcast Receiver简介

       Android中的四大组件是Activity、Service、Broadcast Receiver和Content Provider。而Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其作出反应的机制。

       二、Broadcast Receiver接收系统自带的广播

       我们做一个例子,功能是在系统启动时播放一首音乐。

       1、建立一个项目Lesson21_BroadcastReceiver,拷贝一首音乐进res/raw目录。

       2、建立HelloBroadcastReceiver.java 内容如下:

Java代码
  1. package 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.         @Override  
  13.         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:

XML/HTML代码
  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>
  17. </manifest>  

       4、发布程序,启动模拟器,可以在Logcat中看到:

Android学习指南之二十一:Broadcast Receiver 的使用

       同时能听到音乐播放的声音。说明我们确实接收到了系统启动的广播事件,并做出了响应。

Android学习指南之二十一:Broadcast Receiver 的使用

       三、自定义广播

       下面我们学习自己制作一个广播。我们接着刚才的例子,继续写下去。

       5、在MainBroadcastReceiver.java中填写如下代码:

Java代码
  1. package 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.         @Override  
  12.         public void onCreate(Bundle savedInstanceState) {   
  13.                 super.onCreate(savedInstanceState);   
  14.                 setContentView(R.layout.main);   
  15.   
  16.                 Button b1 = (Button) findViewById(R.id.Button01);   
  17.   
  18.                 b1.setOnClickListener(new View.OnClickListener() {   
  19.   
  20.                         @Override  
  21.                         public void onClick(View v) {   
  22.                                 //定义一个intent   
  23.                                 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内容如下:

Java代码
  1. package 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.         @Override  
  13.         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内容如下:

XML/HTML代码
  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.                 <action android:name="android.basic.lesson21.HelloYaoYao">  
  17.             </action></intent>  
  18.   
  19.     </receiver>  
  20. </application>  
  21. <uses -sdk="" android:minsdkversion="8">  
  22. </uses>
  23. </manifest>   

       8、运行程序,点击按钮,查看LogCat,听听声音。

Android学习指南之二十一:Broadcast Receiver 的使用

Android学习指南之二十一:Broadcast Receiver 的使用

       好了,关于Broadcast Receiver的内容就讲到这里了,希望大家能学习巩固好。


android开发学习网 » Android学习指南之二十一:Broadcast Receiver 的使用