1. 程式人生 > >android 廣播機制

android 廣播機制

android的廣播機制,在我們開發的過程中,有很多要用到的地方。

廣播機制,說白了就是一個傳送廣播,一個接受廣播。

我還是拿我自己的例子來進行說明吧。 

我需要對自己當前的網路進行一個判斷。如果當前網路環境斷開連線了,或者發生變化什麼的。

在這個時候,我們傳送一個廣播,然後當我們只要接受到這條特定的廣播訊息以後,彈出toast,提示當前網路斷開。就這麼一個例子吧。

具體還是邊上程式碼,邊說明吧。

1.第一種方法就是配置檔案進行註冊廣播,然後廣播接收器接受廣播:

我做的是全域性的廣播。 所以我們首先在我們的Manifest.xml中,對廣播進行註冊宣告:

<!-- 網路連線的廣播註冊 
--> <receiver android:name=".broadcast.ConnectionChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>

action就是我們廣播的名字,也就是特定的標識。然後ConnectionChangeReceiver就是我們自己寫的廣播接收器。

白話一下就是,當我們自定義的這個Receiver接受到action的廣播的時候,執行什麼樣的操作。

個人理解,不對的地方還請大家給予指教。

接下來就是我們的Receiver的接收廣播後的程式碼:

public class ConnectionChangeReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE
); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) { // Intent intent1 = new Intent(context, ToastActivity.class); // intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(intent1); Toast.makeText(context, "您的網路連線已斷開", Toast.LENGTH_SHORT).show(); //改變背景或者 處理網路的全域性變數 } else { //改變背景或者 處理網路的全域性變數 } } }

這就是一個簡單的廣播發送接收處理邏輯。

2.第二種方法就是所謂的動態註冊廣播,傳送廣播的方法了。

首先,我們註冊廣播接收器:

private DownloadedReceiver receiver;
receiver = new DownloadedReceiver();
this.registerReceiver(receiver, new IntentFilter(ConfigUtil.ACTION_DOWNLOADING));

宣告廣播接收器,然後進行註冊。

動態註冊時候要注意: registerReceiver中的兩個引數,一個是我們的接收器,一個則是過濾器。

Filter尤其說明一下: 只有我們傳送的廣播是ConfigUtil.ACTION_DOWNLOADING的時候,我們才能接收到。

接下來就要說一下我們的傳送廣播的地方了。

傳送廣播,在我們需要的地方做如下操作:

Intent intent = new Intent(ConfigUtil.ACTION_DOWNLOADING);
intent.putExtra("status", status);
intent.putExtra("title", title);
sendBroadcast(intent);

 一方面,過濾器必須要一致。也就是new Intent(ConfigUtil.ACTION_DOWNLOADING),這個也就是我們的過濾標識,即action。

然後putExtra進行資料的攜帶。

最後就可以進行sendBroadCast了。傳送廣播攜帶我們的intent。裡面有action的過濾,有攜帶的資料。

那麼廣播接收的具體操作呢?

來了:

//廣播接收器
private class DownloadedReceiver extends BroadcastReceiver {

    @Override
public void onReceive(Context context, Intent intent) {
        if (intent.getStringExtra("title") != null) {
            currentDownloadTitle = intent.getStringExtra("title");
}

        int downloadStatus = intent.getIntExtra("status", ParamsUtil.INVALID);
    }
}

這就是我們的廣播接收器的具體操作啦。因為註冊廣播的時候已經與傳送廣播的過濾進行了匹配,所以具體的操作以及putExtra的資料都可以在這裡獲取到。

這就是廣播的傳送接收的兩種模式了吧。我做了一些白話方面的解釋。網上已經有很多了,個人純屬自己的記錄,能看的更加明瞭。

廣播的作用,大家也可以進行聯想,其實就是可以讓我們在程式中進行傳輸資訊的一種機制。大家可以多方面運用。對廣播的瞭解也是比較重要的。

好啦,結束了。個人微博: 外面的陽光真美,  歡迎大家關注。