1、標準廣播:是一種完全非同步執行的廣播,在廣播發出之後,所有的廣播接收器幾乎會在同一時刻接收到這條廣播信息,它們之間沒有先後順序。效率高、無法被截斷。 2、有序廣播:是一種同步執行的廣播,在廣播發出後,同一時刻只會有一個廣播接收器能夠接收到這條廣播,當這個廣播接收器中的邏輯執行完畢後,廣播才會繼續傳 ...
1、標準廣播:是一種完全非同步執行的廣播,在廣播發出之後,所有的廣播接收器幾乎會在同一時刻接收到這條廣播信息,它們之間沒有先後順序。效率高、無法被截斷。
2、有序廣播:是一種同步執行的廣播,在廣播發出後,同一時刻只會有一個廣播接收器能夠接收到這條廣播,當這個廣播接收器中的邏輯執行完畢後,廣播才會繼續傳遞。
這種廣播有先後順序,優先順序高的廣播接收器就可以先接收到廣播,並且前面的廣播接收器可以截斷正在傳播的廣播。
3、動態註冊廣播:在代碼中直接註冊。
4、創建廣播接收器:新建一個類,讓它繼承自BroadcastReceiver,並重寫父類的onReceive()方法。有廣播到來時,onReceive()方法中就會得到執行,具體邏輯就寫在這個方法中。
5、在onCreate()方法中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 方法進行動態註冊,第一個參數傳入創建的類的實例,第二個參數傳入IntentFilter的實例。
6、下麵的代碼實現網路狀態的監聽:public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.cnn.CONNECTIVITY_CHANGE"); //action中的值是要監聽的系統廣播 networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver,intentFilter); //用registerReceiver()方法進行註冊,分別傳入自定義類的實例和意圖實例 } //動態註冊的廣播接收器一定要取消註冊,使用unregisterReceiver()方法取消註冊 protected void onDestory(){ super.onDestroy(); unregisterReceiver(networkChangeReceiver); } //自定義一個類繼承自BroadcastReceiver,並重寫他的onReceive()方法 class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent){ Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show();
}
}
}
7、最後要在AndroidManifest.xml中聲明許可權,否則程式會直接崩潰。註意:中間那行才是申請許可權,
package="example.com.broadcasttest"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <application> </application>