Activity间通过广播形式动态进行数据传输

来源:互联网 发布:淘宝修容棒排行榜 编辑:程序博客网 时间:2024/05/05 16:40

 

作者:江苏科技大学 机械工程学院 赵长金

一、Android广播机制介绍

广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的。

Android中广播的是操作系统中产生的各种各样的事件。例如,收到一条短信就会产生一个收到短信息的事件。而Android操作系统一旦内部产生了这些事件,就会向所有的广播接收器对象来广播这些事件。

BraodcastReceiver(广播接收器)是为了实现系统广播而提供的一种组件,并且广播事件处理机制是系统级别的。比如,我们可以发出一种广播来测试是否收到短信,这时候就可以定义一个BraodcastReceiver来接受广播,当收到短信时提示用户。我们既可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。

我们也可以在自己的应用程序中开发BroadcastReceiver,然后把广播接收器这个类或者对象注册到Android操作系统上去,让操作系统知道现在有这样一个广播接收器正在等待接收Android操作系统的广播,即在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。

当有广播事件产生时,Android操作系统首先告诉注册到其上面的广播接收器产生了一个怎么样的事件,每个接收器首先判断是不是我这个接收器需要的事件,如果是它所需要的事件,再进行相应的处理。

例子,我们把骚扰电话的黑名单放到数据库中去,当接到电话时会产生一个接电话事件,事先在Android操作系统中注册一个BroadcastReceiver的对象,当产生事件的时候,会通知我们的广播接收器对象,接收器对象接收到消息之后,就会到数据库里面去取所有黑名单电话和接到的这个电话号码进行比较,如果匹配就直接挂掉。

二、发送方Activity

public class BroadCastActivity extends Activity {
    public static final String ACTION_INTENT_TEST = "com.cjoy.temp";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.Button01);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(ACTION_INTENT_TEST);

         intent.put数据
                sendBroadcast(intent);

            }
        });
    }
}

 

三、接收方Activity

public class Activity2 extends Activity{

MyBroadcast broadcastReceiver=null;

protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
          setContentView(R.layout.activity2_layout);

broadcastReceiver=new MyBroadcast();
  IntentFilter filter = new IntentFilter("com.cjoy.temp");  
  //注册广播接收器  
  registerReceiver(broadcastReceiver, filter);

}

  public void onDestroy() {

     unregisterReceiver(broadcastReceiver); 
     super.onDestroy();
    }

public class MyBroadcast extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
   // TODO 自动生成的方法存根
   double de = 0;
   addY=intent.getDoubleExtra("SHUJU", de);
   该做啥 在这里
  }
        
       }

}


0 0
原创粉丝点击