`

【Android】BroadcastReceiver简介和用法实例,两种注册方式 (二)

阅读更多

 

一.BroadcastReceiver简介 

   BraodcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,它和事件处理机制类似,但是事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试手机电量的变化,这时候就可以定义一个BraodcastReceiver来接受广播,当手机电量较低时提示用户。我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。我们同样可以在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。

   在程序中使用BraodcastReceiver是比较简单的。首先要定义一个类继承BraodcastReceiver,并且覆盖onReceiver()方法来响应事件。然后注册在程序中BraodcastReceiver。最后构建Intent对象调用sendBroadcast()方法将广播发出。

二.BroadcastReceiver的注册方式

 1.静态注册方式

   静态注册方式是在AndroidManifest.xml的application里面定义receiver并设置要接收的action。静态注册方式的特点:不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听内存 的使用情况的,当在手机上安装好后,不管改应用程序是处于什么状态,都会执行改监听方法中的内容。

下面是具体的例子:

MainActivity.java

  1. package com.android.broadcast;  
  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 MainActivity extends Activity{  
  11.     //定义action常量  
  12.     protected static final String ACTION = "com.android.broadcast.RECEIVER_ACTION";  
  13.     //定义Button对象  
  14.     private Button btnBroadcast;  
  15.     @Override 
  16.     public void onCreate(Bundle savedInstanceState){  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         btnBroadcast=(Button)findViewById(R.id.btnBroadcast);  
  20.         //为按钮设置单击监听器  
  21.         btnBroadcast.setOnClickListener(new OnClickListener(){  
  22.             @Override 
  23.             public void onClick(View v){  
  24.                 //实例化Intent  
  25.                 Intent intent=new Intent();  
  26.                 //设置Intent的action属性  
  27.                 intent.setAction(ACTION);  
  28.                 //发出广播  
  29.                 sendBroadcast(intent);  
  30.             }  
  31.         });  
  32.     }  

在“com.android.broadcast”包中定义一个MyReceiver类,继承于BroadcastReceiver,覆盖onReceive()方法。

MyReceiver.java

  1. package com.android.broadcast;  
  2.  
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.util.Log;  
  7.  
  8. public class MyReceiver extends BroadcastReceiver{  
  9.    //定义日志标签  
  10.     private static final String TAG = "Test";  
  11.     @Override 
  12.     public void onReceive(Context context, Intent intent){  
  13.         //输出日志信息  
  14.         Log.i(TAG, "MyReceiver onReceive--->");  
  15.     }  
  16. }  

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.     <Button 
  8.         android:id="@+id/btnBroadcast" 
  9.         android:layout_width="match_parent" 
  10.         android:layout_height="wrap_content" 
  11.         android:text="发送Broadcast" 
  12.         /> 
  13. </LinearLayout> 

在AndroidManifest.xml配置文件中16~20行声明receiver

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.       package="com.android.broadcast" 
  4.       android:versionCode="1" 
  5.       android:versionName="1.0"> 
  6.     <uses-sdk android:minSdkVersion="10" /> 
  7.  
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  9.         <activity android:name=".MainActivity" 
  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.         <receiver android:name="MyReceiver"> 
  17.             <intent-filter> 
  18.                 <action android:name="com.android.broadcast.RECEIVER_ACTION"/> 
  19.             </intent-filter> 
  20.         </receiver> 
  21.     </application> 
  22. </manifest> 

效果图:

 

 当我们点击按钮的时候,程序会调用onReceive()方法,LogCat输出信息如下:

 2.动态注册方式

   动态注册方式在activity里面调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter,其中里面是要接收的action。动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。

下面是具体的例子:

 MainActivity.java

  1. package com.android.broadcast;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.content.IntentFilter;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.  
  11. public class MainActivity extends Activity{  
  12.     //定义Action常量  
  13.     protected static final String ACTION = "com.android.broadcast.RECEIVER_ACTION";  
  14.     private Button btnBroadcast;  
  15.     private Button registerReceiver;  
  16.     private Button unregisterReceiver;  
  17.     private MyReceiver receiver;  
  18.     @Override 
  19.     public void onCreate(Bundle savedInstanceState){  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         btnBroadcast=(Button)findViewById(R.id.btnBroadcast);  
  23.         //创建事件监听器  
  24.         btnBroadcast.setOnClickListener(new OnClickListener(){  
  25.             @Override 
  26.             public void onClick(View v){  
  27.                 Intent intent=new Intent();  
  28.                 intent.setAction(ACTION);  
  29.                 sendBroadcast(intent);  
  30.             }  
  31.         });  
  32.           
  33.         registerReceiver=(Button)findViewById(R.id.btnregisterReceiver);  
  34.         //创建事件监听器  
  35.         registerReceiver.setOnClickListener(new OnClickListener(){  
  36.             @Override 
  37.             public void onClick(View v){  
  38.                 receiver=new MyReceiver();  
  39.                 IntentFilter filter=new IntentFilter();  
  40.                 filter.addAction(ACTION);  
  41.                 //动态注册BroadcastReceiver  
  42.                 registerReceiver(receiver, filter);  
  43.             }  
  44.         });  
  45.           
  46.         unregisterReceiver=(Button)findViewById(R.id.btnunregisterReceiver);  
  47.         //创建事件监听器  
  48.         unregisterReceiver.setOnClickListener(new OnClickListener(){  
  49.             @Override 
  50.             public void onClick(View v){  
  51.                 //注销BroadcastReceiver  
  52.                 unregisterReceiver(receiver);  
  53.             }  
  54.         });  
  55.     }  

 在“com.android.broadcast”包中定义一个MyReceiver类,继承于BroadcastReceiver,覆盖onReceive()方法。

MyReceiver.java

  1. package com.android.broadcast;  
  2.  
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.util.Log;  
  7.  
  8. public class MyReceiver extends BroadcastReceiver{  
  9.     //定义日志标签  
  10.     private static final String TAG = "Test";  
  11.     @Override 
  12.     public void onReceive(Context context, Intent intent){  
  13.         //输出日志信息  
  14.         Log.i(TAG, "MyReceiver onReceive--->");  
  15.     }  
  16. }  

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.     <Button 
  8.         android:id="@+id/btnBroadcast" 
  9.         android:layout_width="match_parent" 
  10.         android:layout_height="wrap_content" 
  11.         android:text="发送广播" 
  12.         /> 
  13.     <Button 
  14.         android:id="@+id/btnregisterReceiver" 
  15.         android:layout_width="match_parent" 
  16.         android:layout_height="wrap_content" 
  17.         android:text="注册广播接收器" 
  18.         /> 
  19.     <Button 
  20.         android:id="@+id/btnunregisterReceiver" 
  21.         android:layout_width="match_parent" 
  22.         android:layout_height="wrap_content" 
  23.         android:text="注销广播接听器" 
  24.         /> 
  25. </LinearLayout> 

效果图:

 

①当我们首先点击按钮的时候,因为程序没有注册BraodcastReceiver,所以LogCat没有输出任何信息。

②当我们先点击再点击按钮的时候,这时程序会动态的注册BraodcastReceiver,之后会调用onReceive()方法,LogCat输出信息如下:

 

 当我们点击按钮的时候,这时程序会注销BraodcastReceiver,再点击,LogCat没有输出任何信息。

三.BroadcastReceiver 的生命周期

   一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。

 

本文出自 “IT的点点滴滴” 博客,请务必保留此出处http://liangruijun.blog.51cto.com/3061169/655885

分享到:
评论
1 楼 anyang763 2011-11-24  
 

相关推荐

    Android BroadcastReceiver实例Demo

    注册BroadcastReceiver有两种方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明,这样系统在启动时就会自动创建BroadcastReceiver对象。动态注册则是在运行时通过代码完成,需要在适当的时候...

    Android学习之BroadcastReceiver总结

    BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,这样系统在应用程序启动时就会创建并初始化该Receiver,即使应用不在运行状态也能接收...

    Android BroadcastReceiver实例Demo(有序广播的发送)

    本篇文章将深入探讨如何创建和使用一个`Android BroadcastReceiver`实例,特别是关注有序广播的发送。 首先,让我们理解什么是BroadcastReceiver。BroadcastReceiver是Android四大组件之一,它可以监听并响应系统...

    Android BroadcastReceiver

    BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml中声明BroadcastReceiver,应用启动时就会自动初始化。 2. 动态注册:在代码中创建BroadcastReceiver实例并注册,应用...

    android demo,BroadcastReceiver源代码的实现。

    BroadcastReceiver通常有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,这种方式的Receiver在应用启动时就会自动激活,即使应用被关闭,依然可以接收到指定...

    Android BroadcastReceiverDemo

    BroadcastReceiverDemo是针对这一核心功能的一个实例项目,通过它我们可以深入理解BroadcastReceiver的工作原理和使用方法。 BroadcastReceiver主要分为两种类型:显式和隐式。显式BroadcastReceiver需要在...

    BroadcastReceiver使用demo

    BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml中声明BroadcastReceiver,这样系统在应用启动时就会自动创建实例。优点是即使应用被关闭,仍能接收到广播,但缺点是...

    BroadcastReceiver

    BroadcastReceiver有两种主要的注册方式:静态注册和动态注册。 1. 静态注册: 静态注册通常在AndroidManifest.xml文件中完成。这种方式的BroadcastReceiver在应用安装后就会被系统加载,即使应用没有运行,也能...

    Android BroadcastReceiver广播注册方式总结

    BroadcastReceiver的注册方式主要有两种:静态注册和动态注册。 1. 静态注册: 静态注册是在AndroidManifest.xml文件中通过标签来声明BroadcastReceiver的。这种方式的注册使得BroadcastReceiver在应用启动时就会...

    BroadcastReceiver的生命周期

    BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,应用启动时系统会自动创建BroadcastReceiver实例。这种注册方式使得BroadcastReceiver...

    android之旅-Intent和BroadcastReceiver示例代码

    BroadcastReceiver可以通过静态注册和动态注册两种方式实现。静态注册在AndroidManifest.xml中进行,应用启动时即生效;动态注册在代码中完成,需在需要时注册,不再需要时解除注册,这样可以提高应用性能。 以下是...

    Android中BroadcastReceiver的创建与使用步骤.pdf

    BroadcastReceiver分为两种类型:静态注册和动态注册。 1. 静态注册: 静态注册通常在AndroidManifest.xml文件中完成。这样注册的BroadcastReceiver是常驻型的,即使应用程序被关闭,只要系统广播与之匹配,...

    Android开发之BroadcastReceiver用法实例分析

    首先,BroadcastReceiver有两种注册方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明,如示例中的 `&lt;receiver&gt;` 标签,这样BroadcastReceiver在应用启动时就会被创建。动态注册则是在代码运行...

    Android之Service&BroadCastReceiver

    BroadcastReceiver有两种注册方式:静态注册(在AndroidManifest.xml中声明)和动态注册(在代码中实例化并注册)。静态注册的Receiver会在系统启动时自动激活,而动态注册则需要在运行时手动激活,但动态注册的...

    BroadcastReceiver使用Demo

    BroadcastReceiver有两种注册方式:静态注册和动态注册。 1. **静态注册**:在AndroidManifest.xml文件中声明BroadcastReceiver。这种方式下的Receiver会在应用安装时被系统注册,无需手动启动,只要设备接收到匹配...

    BroadcastReceiver 一个Android相关源程序

    首先,BroadcastReceiver的注册有两种方式:静态注册和动态注册。静态注册通常在AndroidManifest.xml文件中进行,这样即使应用不在运行,也能接收到广播。动态注册则在代码中完成,通常在需要时注册,不需要时注销,...

    broadcast_Android 广播机制broadcast用法实例.rar

    在这个“broadcast_Android 广播机制broadcast用法实例.rar”压缩包中,我们很可能会找到关于如何使用BroadcastReceiver的示例代码和教程。 首先,广播分为两种类型:显式广播和隐式广播。显式广播是直接指定接收者...

    Android-Android8.0Broadcast静态注册自动转为动态注册

    BroadcastReceiver分为静态注册和动态注册两种方式。 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,启动时系统会自动创建Receiver实例,即使应用不在后台运行也能接收到广播。这种方式简单便捷...

    Android 广播接收者--BroadcastReceiver

    首先,BroadcastReceiver的注册有两种方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中声明receiver元素,这样系统在启动时就会自动创建广播接收者实例。动态注册则是在代码中使用Context的...

Global site tag (gtag.js) - Google Analytics