10天學通Android開發(3-1)-組件廣播接收器Broadcast Receive

廣播接收器,它和事件處理機制類似,只不過事件的處理機制是程序組件級別的,而廣播處理機制是系統級別的。

BroadcastReceiver如操作系統啓動完畢,發出廣播信號;低電量提示廣播,應用中耗電量大的部分功能關閉;偵聽短信;

用於接收並處理廣播通知(broadcastannouncements)。多數的廣播是系統發起的,如地域變換、電量不足、來電來信等。程序也可以播放一個廣播。程序可以有任意數量的 broadcast receivers來響應它覺得重要的通知。broadcast receiver可以通過多種方式通知用戶:啓動activity、使用NotificationManager、開啓背景燈、振動設備、播放聲音等,最典型的是在狀態欄顯示一個圖標,這樣用戶就可以點它打開看通知內容。

通常我們的某個應用或系統本身在某些事件(電池電量不足、來電來短信)來臨時會廣播一個Intent出去,我們可以利用註冊一個Broadcast Receiver來監聽到這些Intent並獲取Intent中的數據。

 

使用場合:通信過程傳遞過來的數據量不大,頻度也不高

主要功能

  1. 事件的廣播比價簡單,構建Intent對象,調用sendBroadcast()方法將廣播發出

  2. 直接定義事件接收器進行接收,重寫onReceiver

  3. 註冊\註銷Receiver ,registerReceiverr,filter,       unregisterReceiver(r);

     

 

 

案例:

  1. 創建新工程

  2. 新建一個廣播接收器,類: MyBroadcast擴展自BroadcastReceiver,一旦收到消息,會執行抽象方法onReceive,如下:

 

 

publicvoid onReceive(Context arg0, Intent arg1) {

      // TODO Auto-generatedmethod stub

         System.out.println("我收到了你的信息:"+arg1.getStringExtra("MyTxt"));

   }

 

3) AndroidManifest.xml,註冊廣播接收器,類: MyBroadcast

4MainActivity加進一按鈕,發送消息

<Button

       android:id="@+id/butSendBroad"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/textView1"

       android:layout_below="@+id/textView1"

       android:layout_marginTop="29dp"

        android:text="SendBroad" />

5)實現發送

butSendBroad.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

 

              Intent i=newIntent(MainActivity.this,MyBroadcast.class);

            

             i.putExtra("MyTxt", "HelloBroad");

            

             sendBroadcast(i);

            

          }

        }

       );

6)可先運行,logcat可看到消息

 

7動態的註冊和註銷廣播接受器, AndroidManifest中去除廣播接收器類的註冊

<!--  <receiverandroid:name="MyBroadcast"></receiver>-->

 

8)MainActivity中,添加註冊和註銷兩按鈕

<Button

       android:id="@+id/btnReg"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/butSendBroad"

       android:layout_below="@+id/butSendBroad"

       android:layout_marginTop="45dp"

       android:text="Regist"/>

 

    <Button

       android:id="@+id/btnUnReg"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_alignLeft="@+id/btnReg"

       android:layout_centerVertical="true"

        android:text="Unreg" />

9) MyBroadcast指定一地址變量:

 

public static final String ACTION="10-1.intenet.action.mybroad";

 

10) 定義MyBroadcast實例

 

private final MyBroadcast MyBRecive=newMyBroadcast();

 

11)實現註冊

btnReg.setOnClickListener(newView.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

             // TODO Auto-generatedmethod stub

             registerReceiver(MyBRecive,new IntentFilter(MyBroadcast.ACTION));

            

            

          }

      });

 

12)取消註冊

btnUnReg.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

             // TODO Auto-generatedmethod stub

             unregisterReceiver(MyBRecive);

            

            

          }

      });

13)發送廣播更改:

butSendBroad.setOnClickListener(new View.OnClickListener() {

         

          @Override

          publicvoid onClick(View v) {

 

             //Intent i=newIntent(MainActivity.this,MyBroadcast.class);

              Intent i=newIntent(MyBroadcast.ACTION);

            

             i.putExtra("MyTxt", "HelloBroad");

            

             sendBroadcast(i);

            

          }

        }

       );

 

參考:

http://www.cnblogs.com/linzheng/archive/2011/01/22/1942053.html

 

源碼下載:

http://down.51cto.com/data/1964492

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