1. 程式人生 > >Activity間通過廣播形式動態進行資料傳輸

Activity間通過廣播形式動態進行資料傳輸

作者:江蘇科技大學 機械工程學院 趙長金

一、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);
   該做啥 在這裡
  }
       
       }

}