註冊BroadcastReceiver的方法有兩種:
1、在應用程序的代碼中進行註冊
如果一個BroadcastReceiver用於更新UI,那麼通常會使用這種方法進行註冊
在Activity啓動的時候註冊BroadcastReceiver,在Activity不可見以後取消註冊
註冊BroadcastReceiver: registerReceiver(receiver,filter);
取消註冊BroadcastReceiver: unregisterReceiver(receiver);
2、在AndroidManifest.xml當中進行註冊
使用這樣的方式註冊BroadcastReceiver,即使應用程序沒有啓動,或者被kill掉後,也始終會處於活動狀態, BroadcastReceiver還可以接收廣播消息
- <receiver android:name=".TestReceiver">
- <intent-filter>
- <action android:name="android.intent.action.PICK" />
- </intent-filter>
- </receiver>
TestBC2Activity.Java
- public class TestBC2Activity extends Activity {
- private Button registerButton = null;
- private Button unregisterButton = null;
- private SMSReceiver smsReceiver = null;
- private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- registerButton = (Button)findViewById(R.id.register);
- unregisterButton = (Button)findViewById(R.id.unregister);
- registerButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //生成一個BroiadcastReceiver對象
- smsReceiver = new SMSReceiver();
- //生成一個IntentFilter對象
- IntentFilter filter = new IntentFilter();
- //爲IntentFilter添加一個Action
- filter.addAction(SMS_ACTION);
- //將BroadcastReceiver對象註冊到系統當中
- TestBC2Activity.this.registerReceiver(smsReceiver,filter);
- }
- });
- unregisterButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //解除BroadcastReceiver對象的註冊
- TestBC2Activity.this.unregisterReceiver(smsReceiver);
- }
- });
- }
- }
SMSReceiver.java
- public class SMSReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- System.out.println("receive message");
- //接受Intent對象當中的數據
- Bundle bundle = intent.getExtras();
- //在Bundle對象當中有一個屬性名爲pdus,這個屬性的值是一個Object數組
- Object[] myOBJpdus = (Object[]) bundle.get("pdus");
- //創建一個SmsMessage類型的數組
- SmsMessage[] message = new SmsMessage[myOBJpdus.length];
- System.out.println(message.length);
- for(int i = 0 ; i < myOBJpdus.length; i++){
- //使用Object數組當中的對象創建SmsMessage對象
- message[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);
- //調用SmsMessage對象的getDisppalyMessageBody()方法,就可以得到消息的內容
- System.out.println(message[i].getDisplayMessageBody());
- }
- }
- }
這個廣播接收是測試接收短信,所以需要mainfest文件允許
- <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
結果:
備註:
給模擬器發短信是使用Emulator Control