Android跨進程通信廣播(Broadcast)


廣播是一種被動跨進程通訊的方式。當某個程序向系統發送廣播時,其他的應用程序只能被動地接收廣播數據。這就象電台進行廣播一樣,聽眾只能被動地收聽,而不能主動與電台進行溝通,在應用程序中發送廣播比較簡單。只需要調用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所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM