Android BroadcastReceiver应用举例


/************ 动态注册 ************/

TextMain.java

  1. package lxy.litsoft;  
  2.   
  3. import Android.app.Activity;  
  4. import android.content.BroadcastReceiver;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.IntentFilter;  
  8. import android.os.Bundle;  
  9. import android.util.Log;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13.   
  14. public class TestMain extends Activity {  
  15.       
  16.     BroadcastReceiver bcr;  //声明一个广播接收器   
  17.     Button btSendMessage;   //声明一个按钮   
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.           
  22.         //实例化广播接收器对象   
  23.         bcr = new BroadcastReceiver(){  
  24.             public void onReceive(Context context, Intent intent) {  
  25.                 Log.d("test""^-^, Have received Massage!");  
  26.             }  
  27.         };  
  28.           
  29.         //实例化按键对象并为其添加监听器   
  30.         btSendMessage = (Button)findViewById(R.id.button01);  
  31.         btSendMessage.setOnClickListener(new ButtonListener());  
  32.     }  
  33.       
  34.     class ButtonListener implements OnClickListener{  
  35.         public void onClick(View v) {  
  36.             //当点击按钮的时候,就发送广播   
  37.             Intent intent = new Intent();  
  38.             intent.setAction("ABC");  
  39.             sendBroadcast(intent);  
  40.         }  
  41.     }  
  42.       
  43.     protected void onStart() {  
  44.         super.onStart();  
  45.         //注册广播接收器(动态注册)   
  46.         IntentFilter filter = new IntentFilter();  
  47.         filter.addAction("ABC");  
  48.         this.registerReceiver(bcr, filter);  
  49.     }  
  50.   
  51.     protected void onStop() {  
  52.         super.onStop();  
  53.         //取消注册广播接收器   
  54.         this.unregisterReceiver(bcr);  
  55.     }    
  56. }  

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/hello"  
  11.     />  
  12. <Button  
  13.     android:id="@+id/button01"  
  14.     android:text="SendMessage"  
  15.     android:layout_width="wrap_content"  
  16.     android:layout_height="wrap_content"></Button>  
  17. </LinearLayout>  

/************ 静态注册 ************/

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="lxy.litsoft"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="8" />  
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name=".TestMain"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.   
  17.         <receiver android:name="MyBroadcastReciever">  
  18.             <intent-filter>  
  19.                 <action android:name="ABC"></action>  
  20.             </intent-filter>  
  21.         </receiver>  
  22.           
  23.     </application>  
  24. </manifest>  

TestMain.java

  1. package lxy.litsoft;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class TestMain extends Activity {  
  11.       
  12.     Button btSendMessage;   //声明一个按钮   
  13.     public void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.main);  
  16.   
  17.         btSendMessage = (Button)findViewById(R.id.button01);  
  18.         btSendMessage.setOnClickListener(new ButtonListener());  
  19.     }  
  20.       
  21.     class ButtonListener implements OnClickListener{  
  22.         public void onClick(View v) {  
  23.             //当点击按钮的时候,就发送广播   
  24.             Intent intent = new Intent();  
  25.             intent.setAction("ABC");  
  26.             sendBroadcast(intent);  
  27.         }  
  28.     }  
  29.    
  30. }  

MyBroadcastReciever.java

  1. package lxy.litsoft;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.util.Log;  
  6.   
  7.   
  8. public class MyBroadcastReciever extends BroadcastReceiver{  
  9.     public void onReceive(Context context, Intent intent) {  
  10.         Log.d("test""^-^, Have received Massage!");  
  11.     }  
  12. }  

动态注册和静态注册一个BroadcastReceiver的区别:

动态注册较静态注册灵活。实验证明:当静态注册一个BroadcastReceiver时,不论应用程序是启动与否。都可以接受对应的广播。

动态注册的时候,如果不执行unregisterReceiver();方法取消注册,跟静态是一样的。但是如果执行该方法,当执行过以后,就不能接受广播了。

相关内容