一、廣播類型
標準廣播:
是一種完全異步執行的廣播,在廣播發出后,所有廣播接收器幾乎在同一時間接收到這條廣播消息。他們之間沒有任何先后順序。這種廣播小綠本比較高,但它無法被截斷。
有序廣播:
是一種同步執行的廣播,在廣播發出后,同一時刻只會有一個廣播接收器能夠接收到這條廣播消息,當這個廣播接收器中的邏輯執行完成之后,廣播才會繼續傳遞消息。這種廣播有先后順序,優先級高的廣播接收器先接收到廣播消息,并且前面的廣播接收器還可以截斷正在傳遞的廣播。
二、接受系統廣播
接收廣播需要用到廣播接收器。廣播接收器可以自由的對自己感興趣的廣播進行注冊,當對應的廣播發出時,廣播接收器就能后接受到該廣播,并在內部處理相應的邏輯。廣播接收器分兩種注冊方式:在代碼中注冊為動態注冊;在AndroidManifest中注冊是靜態注冊。
動態注冊的demo:
MyBroadcastReceiver繼承于BroadcastReceiver,重寫了onReceive()方法,當網絡狀態發生變化時,這個onReceive方法就會被執行。在onCreate方法中創建了一個IntentFilter實例,添加了一個值為android.net.conn.CONNECTIVITY_CHANGE的action。接下來建了一個MyBroadcastReceiver的實例,然后調用registerReceiver注冊這個廣播,把intentFilter和BroadcastReceiver兩個實例都穿進去,這樣MyBroadcastReceiver會接受到所有值為android.net.conn.CONNECTIVITY_CHANGE的廣播 。android.net.conn.CONNECTIVITY_CHANGE這個值是系統用于檢測網絡變化的。另外動態注冊的廣播都要取消注冊,在onDestroy方法中調unregisterReceiver()方法實現。在運行時候會遇到權限問題,因為Android中很多操作都需要聲明權限才能進行。需要在AndroidManifest中聲明這個權限:<uses-permission android:name="andorid.permission.ACCESS_NETWORK_STATE"/>用手機去測試就可以,每次發生網絡變化時,就會彈出一個toast。
靜態廣播:
利用Android Studio直接new一個broadcast,AndroidManifest中會自動生成Receiver對應的結構。然后在Receiver結構中添加廣播的接收廣播的關鍵字
<intent-fliter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-fliter>
就完成了靜態廣播的注冊。mainActivity中的代碼進行細微調整就可以。"BOOT_COMPLETED"這個關鍵字是系統開機啟動完成發出的系統廣播。
自定義廣播:
自定義廣在注冊是的關鍵字是自己隨機定義的,在代碼上的展示就是:
標準廣播:<action android:name="自定義"/>
在onCreat方法中:
Intent intent =new Intent("自定義");
startBroadcast(intent);
有序廣播的區別在發送發送時區別就是startOrderBroadcast(intent);決定廣告接收順序的在廣播注冊時候的屬性條目? android:priority="100"。在一個activity中接收到這個廣播以后不想讓它繼續傳遞的話,只需要在onReceive方法的末尾添加 abortBroadcast();
本地廣播
和普通廣播的區別不大需要額外聲明一個localBroadcastManager來發送廣播。本地廣播只能本地接收。
廣播差不多就這么用,比較簡單