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的資料都可以在這裡獲取到。
這就是廣播的傳送接收的兩種模式了吧。我做了一些白話方面的解釋。網上已經有很多了,個人純屬自己的記錄,能看的更加明瞭。
廣播的作用,大家也可以進行聯想,其實就是可以讓我們在程式中進行傳輸資訊的一種機制。大家可以多方面運用。對廣播的瞭解也是比較重要的。
好啦,結束了。個人微博: 外面的陽光真美, 歡迎大家關注。