分享

Android Broadcast机制

 东茹阁 2013-07-10
下面介绍一下广播机制原原理:

一.Broadcast Receive为广播接收器,它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的。
 
二.事件的广播比较简单,构建Intent对象,调用sendBroadcast()方法将广播发出。事件的接收是通过定义一个继承BroadcastReceiver类来实现,继承该类后覆盖其onReceiver方法,并在该方法中相应事件。
 
1.创建Broadcast,首先要有部件发送Broadcast,发送Broadcast的代码如下

        Intent intent1 = new Intent(AC1);//AC1为reciver的动作名称。

        sendBroadcast(intent1);
此处的AC1要定义:
static final String AC1 = "com.test.action.NEW_BC1";//

  MainActivity:
   Intent intent=new Intent();
   intent.setAction(MY_ACTION);
   intent.putExtra("msg","请回复信息");
   sendBroadcast(intent);
  MyReceiver:
   public calss MyReceiver extends BroadcastReceiver{
       public void onReceiver(Context ctx,intent intent){
            //从Intent中获得信息
           String msg=intent.getString("msg");
          Toast.makeText(ctx,msg,Toast.LENGTH_LONG).show()

          }

       }
   
三.系统广播事件的使用
 
   1. 这些广播是系统自动发出,我们直接定义事件接收器进行接收。
      通过配置文件注册
      MyReceiver2:
     public class MyReceiver2 extends BroadcastReceiver{
            
           public void onReceiver( Context context,Intent intent){
                  Log.i("my_tag","BOOT_COMPLETED")
                     
                     }     

                 }
    //   AndroidMainifest.xml: 第一种注册方式
      <receiver android:name="MyReceiver2">
          <intent-filter>
            <android android:name="android.intent.android.BOOT_COMPLETED">
         </intent-filter>
       </receiver>
       通过代码注册:
       IntentFilter filter=new IntentFilter();//实例化
       //实例化Receiver
       MyReceiver2=new MyReceiver2();
    //  第二种注册方式      
        //注册Receiver
       registerReceiver(r,filter);
         //注销Receiver
       unregisterReceiver(r);

四.Notification和NotificationManager的使用
 
   Broadcast Receiver组件并没有提供可视化的界面来显示广播信息。这里我们可以使用Notification和Notification Manager来实现可视化的信息的界面,通过使用它们 ,我们可以显示广播信息的内容,图标及震动信息。
 
五.AlarmManager的使用

   现在的手机普遍都会有一个闹钟功能,如果使用Android来实现一个闹钟,可以使用AlarmManager来实现。AndroidManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个任务,AlarmManager对象一般不直接实例化,而是通过Context.getSystemService(Context.ALARM_SERVICE)方法获得。
机制的方式也是有所不同的,但大家所需要的。
帮助文档也写得很明白。


补充实例
发送方
Intent intent = new Intent("cn.com.broadcast.current.percent");
intent.putExtra("current_percent",currentPercent);
context.sendBroadcast(intent);

接收方
//broadcast
        IntentFilter filter = new IntentFilter("cn.com.broadcast.current.percent");
        GalleryUploadMain.this.setProgressBroadcast = new SetProgressBroadcast();
        GalleryUploadMain.this.registerReceiver(GalleryUploadMain.this.setProgressBroadcast,filter);//注册广播
//销毁广播,在onDestroy()方法中
        super.unregisterReceiver(GalleryUploadMain.this.setProgressBroadcast);

//Broadcast
    public class SetProgressBroadcast extends BroadcastReceiver {

        @Override
        public void onReceive(Context context,Intent intent){
            if("cn.com.broadcast.current.percent".equals(intent.getAction())){
                //判断是否符合广播条件,符合则:
                currentPercent = intent.getIntExtra("current_percent",0);
                progressBar.setProgress((int)(100*currentPercent));
                if (currentPercent == 1){
                    progressBar.setVisibility(View.GONE);
                }
            }
        }
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多