Android學習筆記之廣播機制(1)
廣播接收者(BroadcastReceiver)用于異步接收廣播Intent,廣播Intent的發送是通過調用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()來實現的。通常一個廣播Intent可以被訂閱了此Intent的多個廣播接收者所接收。
廣播機制:
要實現一個廣播接收者方法如下:
界面:
package mars.testbc; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class TestActivity extends Activity { /** Called when the activity is first created. */ private Button sendButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.testreceiver); sendButton = (Button)findViewById(R.id.sendButton); sendButton.setOnClickListener(new BroadcastListener()); } class BroadcastListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_EDIT); TestActivity.this.sendBroadcast(intent); } } }
第一步:要想實現一個廣播機制,就必須實現一個類,這個類繼承于BroadcastReceiver并重寫onReceive()方法。
package mars.testbc; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class TestReceiver extends BroadcastReceiver{ public TestReceiver(){ System.out.println("TestReceiver"); } @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceive"); } }
事件響應的實現應在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"> <intent-filter> <action android:name="android.intent.action.PICK" /> </intent-filter> </receiver>
生命周期:
每次廣播到來時,會重新創建BroadcastReceiver對象,并且調用onReceive()方法,執行完以后,該對象即被銷毀.
當onReceive()方法在10秒內沒有執行完畢,Android會認為該程序無響應.所以在
BroadcastReceiver里不能做一些比較耗時的操作,否側會彈出ANR(Application No
Response)的對話框.。