1. 程式人生 > >Android之廣播機制—靜態註冊

Android之廣播機制—靜態註冊

廣播機制:
通過當前Activity里加載的佈局內的控制元件繫結監聽器,監聽器內建立Intent物件,
並給Intent的action標籤賦值(一般選擇內建標籤),
並用當前activity的物件的sendBroadcast方法將這個帶有廣播的intent物件傳送出去。
然後建立廣播接收器類,繼承自BroadcastReceiver父類,重寫其onReceive方法,
在onReceive方法內,寫入邏輯程式碼,也就是接收廣播後的
處理方法。然後在Manifest檔案裡對Receiver進行註冊,
Receiver內的action標籤必須和剛才傳送訊息的intent的action標籤內容一致。
這樣每次動作帶有監聽器的控制元件時,廣播接收器就能收到其廣播,並做出相應處理。

示例程式碼:

首先在Manifest檔案中為Receiver進行註冊。
</pre><pre name="code" class="html"><!--為建立的廣播接收器類進行註冊,引用接收器類的地址,和activity的引用方式一樣-->
 <receiver android:name=".Receiver">
	   <!--intent-filter內的action標籤寫上和我們傳送廣播的intent的標籤相同,這樣這個接收器就能
            夠接收我們按鈕所發出的廣播了。如果標籤不同,就不會接收,也不會建立廣播接收器的物件例項。-->
            <intent-filter>
		 <action android:name="android.intent.action.EDIT"/>
            </intent-filter>
        </receiver>

接下來是按鈕的監聽器,用於傳送廣播。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {//監聽器的含義就是,點選一次按鈕,就傳送一次廣播。
                //通過顯式Intent來傳遞這個廣播。
                //新建intent的同時,給intent的setAction屬性賦值。
                //值為標籤"Intent.ACTION_EDIT",需要注意的是,標籤裡的Intent仍然是大寫的.
                Intent intent=new Intent(Intent.ACTION_EDIT);
          //然後用當前Activity的sendBroadcast(send是傳送的意思)方法將這個帶有廣播屬性的intent傳送出去。
          //這個intent廣播的標籤為ACTION_EDIT,所以能接收這個廣播並處理的Receiver的action標籤也必須為ACTION_EDIT.
                MainActivity.this.sendBroadcast(intent);

            }
        });
接下來是接收器類,接收器類一般情況下是需要我們自己建立的。
//這是我們建立的廣播接收器,他先得繼承BroadcastReceiver父類,然後複寫其onReceive(這裡不帶r)方法。
public class Receiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context,Intent intent){
        //onReceive方法的內容就是接收了廣播之後的處理方法。
        Log.d("msg","onReceiver");
    }
}

以上在Manifest檔案中進行註冊的方法叫做靜態註冊,靜態註冊的好處就是程式即使未啟動,
我們也能接收到廣播。
還有一種方法叫做動態註冊,即在程式碼中完成註冊。好處是我們可以自由的控制註冊與登出。
靈活性方面有很大的優勢。
需要注意的是,動態註冊的廣播接收器一定要取消註冊才行。