天天看點

Android之廣播機制—動态注冊

動态注冊,即在代碼中完成注冊。好處是我們可以自由的控制注冊與登出。

靈活性方面有很大的優勢。

需要注意的是,動态注冊的廣播接收器一定要取消注冊才行。

@Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //建立一個intentFilter執行個體,并用其add.Action()方法添加一個Action值。
        //這個值的意思就是當網絡狀态發生變化時,系統就會發出一條廣播。
        //我們要建立一個網絡狀态發生變化的廣播接收器,是以就将值設為此,意為接收此廣播。
        intentFilter=new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

        //建立廣播接收器的執行個體。
        maesReceiver=new MaesReceiver();
        //調用registerReceiver()方法進行注冊和綁定,
	//将有Action标簽值的intentFilter和接收器執行個體傳入。
        //就實作了兩者的綁定與注冊。
        registerReceiver(maesReceiver,intentFilter);

        //這是擷取WIFI執行個體的方法。
        wifiManager=(WifiManager)MainActivity.this.getSystemService(Context.WIFI_SERVICE);

        Button button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //監聽器的意思就是,點選此按鈕,就打開WIFI。
            wifiManager.setWifiEnabled(true);
            }
        });
        Button button1=(Button)findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //此監聽器為關閉WIFI。
                wifiManager.setWifiEnabled(false);
            }
        });
	}
	@Override
    protected void onDestroy(){
        super.onDestroy();
	//用unregisterReceiver()方法取消注冊。
        unregisterReceiver(maesReceiver);
    }
    //這是監聽器類,這次沒有單獨建立一個接收器類,而是用的内部類的方式來呈現。
    class MaesReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context,Intent intent){

            ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
            if (networkInfo!=null&& networkInfo.isAvailable()){
                Toast.makeText(context,"網絡已連接配接",Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(context,"網絡未連接配接",Toast.LENGTH_SHORT).show();
            }
            Log.d("TAG", "綁定成功!");

         
        }
    }
        //以上兩個按鈕會改變目前的網絡狀态,我們建立了一個改變網絡狀态的廣播接收器。
	//是以每當點選按鈕,網絡發生改變時,我們就能接收到廣播了。