動態註冊廣播

廣播分爲有序廣播(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();
   }
  }
 }
}


 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章