Android深入淺出系列之廣播機制—1-Android中的廣播機制

來源:互聯網
上載者:User

  閱讀目錄

  一:什麼是BroadcastReceiver?

  二:布局檔案編寫

  三:代碼檔案編寫

  四:項目定義檔案編寫

  五:運行效果

  一:什麼是BroadcastReceiver?

    在現實生活中,當我們開車的時候,會聽到交通台從廣播裡說“朝內大街擁堵”,如從這裡通過的車輛請繞行,這就是廣播,交通台是發送方,我們個人是接收方,至於我們到底在沒在聽交通台,我們也許在聽郭德綱的相聲,又或者我們雖聽了交通台,要不要再走朝內大街是我們自己的事情了,所以在Android中也是一樣的,廣播只管發送資料,至於怎麼接收資料和怎麼處理資料就是接收方的事情了。

    對於我們來說,我們首先需要把廣播接收器的類註冊到Android的作業系統上面,讓Android的作業系統知道,現在有一個廣播接收器正在等待接收Android系統的廣播了,當Android的作業系統產生一個事件的時候,比如說接到電話,Android操作系就會通知所有註冊在它上面的BroadcastReceiver對象告訴它們產生了一個事件,是個什麼樣子的事件,這些BroadcastReceiver對象首先判斷這個事件是不是我們這個接收器感興趣的事件,不同的BroadcastReceiver對象可能處理不同的事件,如果是我需要或者感興趣的事件,我在進行處理。

  二:布局檔案編寫

    main.xml

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3           android:orientation="vertical" 4         android:layout_width="fill_parent" 5         android:layout_height="fill_parent"> 6 
7   <Button android:layout_width="wrap_content" 8        android:layout_height="wrap_content"
9        android:text="發送廣播"
10        android:id="@+id/br"/>
11</LinearLayout>

  三:代碼檔案編寫

    3.1:MainActivity.java

 1    package com.menglin.broadcastreceiver; 2  3   import android.app.Activity; 4   import android.content.Intent; 5   import android.os.Bundle; 6   import android.view.View; 7   import android.view.View.OnClickListener; 8   import android.widget.Button; 9 10   public class MainActivity extends Activity11   {12      //聲明一個Button對象btn13      private Button btn;14      @Override15      public void onCreate(Bundle savedInstanceState)16      {17         super.onCreate(savedInstanceState);18         //載入布局檔案main.xml19         setContentView(R.layout.main);20         btn = (Button)findViewById(R.id.br);21         //給按鈕綁定監聽單擊事件22         btn.setOnClickListener(listener);23      }24  25      //監聽單擊事件26      private OnClickListener listener = new OnClickListener()27      {28         @Override29         public void onClick(View v)30         {31            //建立一個新的Intent對象32            Intent intent = new Intent();33            //設定Intent對象的動作為撥打到電話34            intent.setAction(Intent.ACTION_CALL);35            //發送廣播36            sendBroadcast(intent);37         }38      };
39  }

   3.2 BroadcastReceiver.java

    這個類是繼承自BroadcastReceiver的一個類,這個類的作用就是處理Android作業系統發出的廣播事件。也就是說Android作業系統發出一個事件的廣播,我們這個類負責接收,接收到之後就會調用onReceive()方法。

    這個BroadcastReceiver對象的生命週期什麼時候結束呢?onReceive()方法被調用完畢,這個BroadcastReceiver對象就結束了,下次再接收廣播在產生新的BroadcastReceiver對象。

 1 package com.menglin.broadcastreceiver; 2  3 import android.content.Context; 4 import android.content.Intent; 5 import android.util.Log; 6  7 public class BroadcastReceiver extends android.content.BroadcastReceiver 8 { 9   private static final String Tag = "BroadcastReceiver";10   //建構函式11   public BroadcastReceiver()12   {13     Log.i(Tag, "建構函式");14   }15 16   //覆寫onReceive()方法17   public void onReceive(Context context, Intent intent)18   {19     Log.i(Tag, "已接收");20   }21 }

  四:項目定義檔案編寫

    AndroidMainfest.xml

    要想讓BroadcastReceiver類能夠接收到Android作業系統所發送的事件,就得把BroadcastReceiver類註冊到Android的作業系統上,就需要這部分紅色代碼了,<intent-filter/>節點就是決定這個BroadcastReceiver類應該接收什麼樣類型的事件,<intent-filter/>是過濾器的意思,符合標準就讓你通過,不符合標準就不讓你通過,也就是說我們要通知一個廣播接收器BroadcastReceiver需要發送Intent對象,如果Intent對象的ACTION符合<action android:name="android.intent.action.CALL" />就會啟動這個BroadcastReceiver。這個節點是我們的廣播接收器接收什麼事件就是在這裡來定義的。

 1 <?xml version="1.0" encoding="utf-8"?> 2   <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3       package="com.menglin.broadcastreceiver" 4       android:versionCode="1" 5       android:versionName="1.0"> 6     <uses-sdk android:minSdkVersion="8" /> 7  8       <application android:icon="@drawable/icon" android:label="@string/app_name"> 9           <activity android:name=".MainActivity"10                   android:label="@string/app_name">11               <intent-filter>12                   <action android:name="android.intent.action.MAIN" />13                   <category android:name="android.intent.category.LAUNCHER" />14               </intent-filter>15           </activity>16       <receiver android:name=".BroadcastReceiver">17                <intent-filter>18                    <action android:name="android.intent.action.CALL" />19                </intent-filter>20           </receiver>21       </application>22   </manifest>

  五:運行效果

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.