廣播接收者(BroadcastReceiver)用於非同步接收廣播Intent,廣播Intent的發送是通過調用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()來實現的。通常一個廣播Intent可以被訂閱了此Intent的多個廣播接收者所接收。
廣播機制:
要實現一個廣播接收者方法如下:
介面:
package mars.testbc;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;</p><p>public class TestActivity extends Activity {<br /> /** Called when the activity is first created. */<br />private Button sendButton;<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.testreceiver);<br /> sendButton = (Button)findViewById(R.id.sendButton);<br /> sendButton.setOnClickListener(new BroadcastListener());<br /> }<br /> class BroadcastListener implements OnClickListener{</p><p>public void onClick(View v) {<br />Intent intent = new Intent();<br />intent.setAction(Intent.ACTION_EDIT);<br />TestActivity.this.sendBroadcast(intent);<br />}</p><p> }<br />}
第一步:要想實現一個廣播機制,就必須實現一個類,這個類繼承於BroadcastReceiver並重寫onReceive()方法。
package mars.testbc;</p><p>import android.content.BroadcastReceiver;<br />import android.content.Context;<br />import android.content.Intent;</p><p>public class TestReceiver extends BroadcastReceiver{</p><p>public TestReceiver(){<br />System.out.println("TestReceiver");<br />}<br />@Override<br />public void onReceive(Context context, Intent intent) {<br />System.out.println("onReceive");<br />}<br />}<br />
事件響應的實現應在onReceive方法中實現。
第二步:訂閱感興趣的廣播Intent,訂閱者法有兩種:
第一種:使用代碼進行訂閱
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
第二種:在AndroidManifest.xml檔案中的<application>節點裡進行註冊:
<intent-filter>是一個過濾器。
在發送廣播過程中,如果某個BroadCastReceiver的Action和這裡的Action相符合,則啟動,接受廣播。
<receiver android:name=".TestReceiver"><br /><intent-filter><br /><action android:name="android.intent.action.PICK" /><br /></intent-filter><br /></receiver>
生命週期:
每次廣播到來時,會重新建立BroadcastReceiver對象,並且調用onReceive()方法,執行完以後,該對象即被銷毀.
當onReceive()方法在10秒內沒有執行完畢,Android會認為該程式無響應.所以在
BroadcastReceiver裡不能做一些比較耗時的操作,否側會彈出ANR(Application No
Response)的對話方塊.。