閱讀目錄
一:什麼是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>
五:運行效果