廣播是一種被動跨進程通訊的方式。當某個程序向系統發送廣播時,其他的應用程序只能被動地接收廣播數據。這就象電台進行廣播一樣,聽眾只能被動地收聽,而不能主動與電台進行溝通,在應用程序中發送廣播比較簡單。只需要調用sendBroadcast方法即可。該方法需要一個Intent對象。通過Intent對象可以發送需要廣播的數據。
先建一個android工程:sendbroadcast。在XML布局文件中放兩個組件:EditText和Button,當單擊按鈕后,會彈出顯示 EditText組件中文本的對話框,關閉對話框后, 會使用sendBroadcast方法發送消息,並將EditText組件的文本通過Intent對象發送出去。完整的代碼如下:
public class Main extends Activity implements OnClickListener { private EditText editText; @Override public void onClick(View view) { new AlertDialog.Builder(this).setMessage(editText.getText().toString()).setPositiveButton("確定", null).show(); // 通過Intent類的構造方法指定廣播的ID Intent intent = new Intent("net.blogjava.mobile.MYBROADCAST"); // 將要廣播的數據添加到Intent對象中 intent.putExtra("text", editText.getText().toString()); // 發送廣播 sendBroadcast(intent); } }
發送廣播並不需要在AndroidManifest.xml文件中注冊,但接收廣播必須在AndroidManifest.xml文件中注冊 receiver。下面來編寫一個接收廣播的應用程序。首先建立一個android工程:receiver。然后編寫一個MyReceiver類,該類是 BroadcastReceiver的子類,代碼如下:
public class MyReceiver extends BroadcastReceiver { // 當sendbroadcast發送廣播時,系統會調用onReceive方法來接收廣播 @Override public void onReceive(Context context, Intent intent) { // 判斷是否為sendbroadcast發送的廣播 if ("net.blogjava.mobile.MYBROADCAST".equals(intent.getAction())) { Bundle bundle = intent.getExtras(); if (bundle != null) { String text = bundle.getString("text"); Toast.makeText(context, "成功接收廣播:" + text, Toast.LENGTH_LONG).show(); } } } }
當應用程序發送廣播時,系統會調用onReceive方法來接收廣播,並通過intent.getAction()方法返回廣播的ID,也就是在發送廣播時Intent構造方法指定的字符串。然后就可以從Bundle對象中獲得相應的數據了。
最后還需要在AndroidManifest.xml文件中注冊receiver,代碼如下:
<receiver android:name="MyReceiver"> <intent-filter> <action android:name="net.blogjava.mobile.MYBROADCAST" /> </intent-filter> </receiver>
在注冊MyReceiver類時需要使用<receiver>標簽,android:name屬性指定MyReceiver類,<action>標簽的android:name指定了廣播的ID。
首先運行receiver程序,然后就可以關閉receiver程序了。接收廣播並不依賴於程序的狀態。就算程序關閉了,仍然可以接收廣播。然后再啟動 sendbroadcast程序。並在文本框中輸入“android”,然后單擊按鈕,會彈出一個顯示文本框內容的對話框,如圖9所示。當關閉對話框后,會 顯示一個Toast信息提示框,這個信息框是由receiver程序彈出的。如圖10所示。