廣播分爲有序廣播(Ordered brodcasts)和無序廣播(Normal broadcasts)
有序廣播是一種同步執行的廣播,在同一時間段,只有一個廣播發出,只有等這個廣播執行完,纔會發向下一個廣播,這種廣播可以截斷
無序廣播時默認廣播,是一種異步執行的操作,廣播發出後,無法截斷。
廣播接收器有兩種註冊方式,一種是在AndroidMainfest裏面註冊和代碼裏面註冊,前者被稱爲靜態註冊,後者成爲動態註冊
那麼如何創建一個廣播接收器呢?其實只需要創建一個類,然後繼承Broadcast Receive然後重寫onReceive()方法就可以啦,當有廣播到來時,onReceive()方法會自動調用
動態註冊廣播:
一:創建一個IntentFilter對象。
二:使用IntentFilter對象的setAction方法添加一個監聽對象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));
三:創建一個類,繼承BroadcastReceiver類,實現裏面的Onreceive方法();在Onreceive方法裏面通過getSystemService(Context.CONNECTIVITY_SERVICE);獲取到ConnectivityManager對象;調用ConnectivityManager裏面的getActiveNetworkInfo()方法獲取到NetWorkInfo對象,判斷netWorkInfo對象是否爲非空&&info.isAvailable()
那麼爲有網絡,反之爲沒有網絡。
四:使用registerReceiver(Broadcastreceiver,intentFilter)實現這個廣播接收
五:在onDestroy裏面使用unregisterReceiver結束當前廣播(unregisterReceiver)
六:在清單文件中加入android.permission.ACCESS_NETWORK_STATE權限,用於查詢是否有網絡
代碼:
public class MainActivity extends Activity {
private IntentFilter intentFilter;
Broadcasts broadcast;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
// 監聽網絡變化
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
broadcast = new Broadcasts();
// 註冊廣播
registerReceiver(broadcast, intentFilter);
}
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcast);
}
class Broadcasts extends BroadcastReceiver
{
public void onReceive(Context arg0, Intent arg1) {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info !=null && info.isAvailable())
{
Toast.makeText(MainActivity.this, "有網絡", 0).show();
}
else
{
Toast.makeText(MainActivity.this, "木有網絡", 0).show();
}
}
}
}