BroadcastReceiver

註冊BroadcastReceiver的方法有兩種:

1、在應用程序的代碼中進行註冊

     如果一個BroadcastReceiver用於更新UI,那麼通常會使用這種方法進行註冊

      在Activity啓動的時候註冊BroadcastReceiver,在Activity不可見以後取消註冊

      註冊BroadcastReceiver:                       registerReceiver(receiver,filter);

      取消註冊BroadcastReceiver:               unregisterReceiver(receiver);

2、在AndroidManifest.xml當中進行註冊

        使用這樣的方式註冊BroadcastReceiver,即使應用程序沒有啓動,或者被kill掉後,也始終會處於活動狀態, BroadcastReceiver還可以接收廣播消息

[html] view plain copy
  1. <receiver android:name=".TestReceiver">  
  2.          <intent-filter>  
  3.              <action android:name="android.intent.action.PICK" />  
  4.          </intent-filter>  
  5.        </receiver>  
例程:在應用程序的代碼中進行註冊:


TestBC2Activity.Java

[java] view plain copy
  1. public class TestBC2Activity extends Activity {  
  2.     private Button registerButton = null;  
  3.     private Button unregisterButton = null;  
  4.     private SMSReceiver smsReceiver = null;  
  5.     private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";  
  6.       
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         registerButton = (Button)findViewById(R.id.register);  
  12.         unregisterButton = (Button)findViewById(R.id.unregister);  
  13.         registerButton.setOnClickListener(new OnClickListener() {  
  14.               
  15.             @Override  
  16.             public void onClick(View v) {  
  17.                 //生成一個BroiadcastReceiver對象  
  18.                 smsReceiver = new SMSReceiver();  
  19.                 //生成一個IntentFilter對象  
  20.                 IntentFilter filter = new IntentFilter();  
  21.                 //爲IntentFilter添加一個Action  
  22.                 filter.addAction(SMS_ACTION);  
  23.                 //將BroadcastReceiver對象註冊到系統當中  
  24.                 TestBC2Activity.this.registerReceiver(smsReceiver,filter);  
  25.                   
  26.             }  
  27.         });  
  28.         unregisterButton.setOnClickListener(new OnClickListener() {  
  29.               
  30.             @Override  
  31.             public void onClick(View v) {  
  32.                 //解除BroadcastReceiver對象的註冊  
  33.                 TestBC2Activity.this.unregisterReceiver(smsReceiver);  
  34.                   
  35.             }  
  36.         });  
  37.     }  
  38. }  

SMSReceiver.java

[java] view plain copy
  1. public class SMSReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         System.out.println("receive message");  
  5.           
  6.         //接受Intent對象當中的數據  
  7.         Bundle bundle = intent.getExtras();  
  8.         //在Bundle對象當中有一個屬性名爲pdus,這個屬性的值是一個Object數組  
  9.         Object[] myOBJpdus = (Object[]) bundle.get("pdus");  
  10.         //創建一個SmsMessage類型的數組  
  11.         SmsMessage[] message = new SmsMessage[myOBJpdus.length];  
  12.         System.out.println(message.length);  
  13.         for(int i = 0 ; i < myOBJpdus.length; i++){  
  14.             //使用Object數組當中的對象創建SmsMessage對象  
  15.             message[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);  
  16.             //調用SmsMessage對象的getDisppalyMessageBody()方法,就可以得到消息的內容  
  17.             System.out.println(message[i].getDisplayMessageBody());  
  18.         }  
  19.     }  
  20.   
  21. }  

這個廣播接收是測試接收短信,所以需要mainfest文件允許

[html] view plain copy
  1. <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  
先按“register”按鈕,註冊BroadcastReceiver,即綁定監聽器,然後再給模擬發短信

結果:

備註:

給模擬器發短信是使用Emulator Control

發佈了34 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章