10天学通Android开发(3-1)-组件广播接收器Broadcast Receive

广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的。

BroadcastReceiver如操作系统启动完毕,发出广播信号;低电量提示广播,应用中耗电量大的部分功能关闭;侦听短信;

用于接收并处理广播通知(broadcastannouncements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。

通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。

 

使用场合:通信过程传递过来的数据量不大,频度也不高

主要功能

  1. 事件的广播比价简单,构建Intent对象,调用sendBroadcast()方法将广播发出

  2. 直接定义事件接收器进行接收,重写onReceiver

  3. 注册\注销Receiver ,registerReceiverr,filter,       unregisterReceiver(r);

     

 

 

案例:

  1. 创建新工程

  2. 新建一个广播接收器,类: MyBroadcast扩展自BroadcastReceiver,一旦收到消息,会执行抽象方法onReceive,如下:

 

 

publicvoid onReceive(Context arg0, Intent arg1) {

      // TODO Auto-generatedmethod stub

         System.out.println("我收到了你的信息:"+arg1.getStringExtra("MyTxt"));

   }

 

3) AndroidManifest.xml,注册广播接收器,类: MyBroadcast

4MainActivity加进一按钮,发送消息

<Button

       android:id="@+id/butSendBroad"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/textView1"

       android:layout_below="@+id/textView1"

       android:layout_marginTop="29dp"

        android:text="SendBroad" />

5)实现发送

butSendBroad.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

 

              Intent i=newIntent(MainActivity.this,MyBroadcast.class);

            

             i.putExtra("MyTxt", "HelloBroad");

            

             sendBroadcast(i);

            

          }

        }

       );

6)可先运行,logcat可看到消息

 

7动态的注册和注销广播接受器, AndroidManifest中去除广播接收器类的注册

<!--  <receiverandroid:name="MyBroadcast"></receiver>-->

 

8)MainActivity中,添加注册和注销两按钮

<Button

       android:id="@+id/btnReg"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/butSendBroad"

       android:layout_below="@+id/butSendBroad"

       android:layout_marginTop="45dp"

       android:text="Regist"/>

 

    <Button

       android:id="@+id/btnUnReg"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/btnReg"

       android:layout_centerVertical="true"

        android:text="Unreg" />

9) MyBroadcast指定一地址变量:

 

public static final String ACTION="10-1.intenet.action.mybroad";

 

10) 定义MyBroadcast实例

 

private final MyBroadcast MyBRecive=newMyBroadcast();

 

11)实现注册

btnReg.setOnClickListener(newView.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

             // TODO Auto-generatedmethod stub

             registerReceiver(MyBRecive,new IntentFilter(MyBroadcast.ACTION));

            

            

          }

      });

 

12)取消注册

btnUnReg.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

             // TODO Auto-generatedmethod stub

             unregisterReceiver(MyBRecive);

            

            

          }

      });

13)发送广播更改:

butSendBroad.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

 

             //Intent i=newIntent(MainActivity.this,MyBroadcast.class);

              Intent i=newIntent(MyBroadcast.ACTION);

            

             i.putExtra("MyTxt", "HelloBroad");

            

             sendBroadcast(i);

            

          }

        }

       );

 

参考:

http://www.cnblogs.com/linzheng/archive/2011/01/22/1942053.html

 

源码下载:

http://down.51cto.com/data/1964492

本文出自 “蓝海战术” 博客,请务必保留此出处http://wanxl.blog.51cto.com/2129901/1592513

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。