利用代碼註冊 BroadcastReceiver 時有以下步驟:
1)產生一個 BroadcastReceiver 對象;
2)產生一個 IntentFilter 對象;
3)為 IntentFilter 對象添加一個 Action ;
4)利用 IntentFilter 和 BroadcastReceiver 綁定註冊一個 BroadcastReceiver 到系統中,當系統廣播該Action事件的時候,就出發該BroadcastReceiver。
1 首先定義一個activity
public class BroadcastDemoActivity extends Activity { private Button regButton,unregButton; final static String SMSReceiver = "android.provider.Telephony.SMS_RECEIVED";//接收簡訊的廣播 private MyBroadReceiver myBroadReceiver;//廣播接收者 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); }private void initView() {regButton = (Button) this.findViewById(R.id.reg);regButton.setOnClickListener(new RegListener());//這裡不能在內部類中註冊廣播,會報錯unregButton = (Button) this.findViewById(R.id.reg);unregButton.setOnClickListener(new RegListener());}private class RegListener implements View.OnClickListener{public void onClick(View v) {switch(v.getId()){case R.id.reg:myBroadReceiver = new MyBroadReceiver();//此對象用於接收廣播,IntentFilter filter = new IntentFilter();filter.addAction(SMSReceiver);//註冊一個接收簡訊的廣播//將廣播接收者註冊到系統中BroadcastDemoActivity.this.registerReceiver(myBroadReceiver, filter);break;case R.id.unreg://從系統中解除廣播接收者BroadcastDemoActivity.this.unregisterReceiver(myBroadReceiver);break;}}}}
2,定義一個接收廣播的類,這裡簡單處理,只列印一個廣播到來的資訊。
public class MyBroadReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.i("MyBroadReceiver", "sms is comming");}}
3,由於訂閱了接收簡訊的廣播,所以要聲明接收簡訊的許可權
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cjf.broadcast" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收簡訊許可權 --> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".BroadcastDemoActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
4,程式碼完成,點擊註冊按鈕,然後用模擬器發送一條簡訊。LogCat會列印出簡訊到來的資訊