Android學習筆記之廣播(2)
BroadCastReceiver用于監聽被廣播的事件(Itent)
為了達到這個目的,我們就必須進行BroadCastReceiver注冊,注冊共兩種方法:
<1>在應用程序代碼中進行注冊
這種注冊方法比較靈活,我們想什么時候注冊就什么時候注冊,什么時候關閉就什么時候關閉。
注冊BroadCastReceiver:
registerReeiver(receiver,filter)
取消BroadCastReceiver:
unregisterReeiver(receiver)
如果一個BroadCastReciver用于更新UI,通常會使用這種方法進行注冊,Activity啟動時就注冊BroadCastReciver,Activity不可見時就取消注冊。
步驟:1 生成一個BroadCastReceiver對象
2 生成一個Intentfilter對象
3 為Intentfilter對象添加一個Action
class RegisterReceiverListener implements OnClickListener{ 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); } } class UnRegisterReceiverListener implements OnClickListener{ public void onClick(View v) { //解除BroadcastReceiver對象的注冊 TestBC2Activity.this.unregisterReceiver(smsReceiver); } }SMSReceiver.java
package mars.testbc2; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; public class SMSReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("receive message"); //接受Intent對象當中的數據 Bundle bundle = intent.getExtras(); //在Bundle對象當中有一個屬性名為pdus,這個屬性的值是一個Object數組 Object[] myOBJpdus = (Object[]) bundle.get("pdus"); //創建一個SmsMessage類型的數組 SmsMessage[] messages = new SmsMessage[myOBJpdus.length]; System.out.println(messages.length); for (int i = 0; i<myOBJpdus.length; i++) { //使用Object數組當中的對象創建SmsMessage對象 messages[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]); //調用SmsMessage對象的getDisppalyMessageBody()方法,就可以得到消息的內容 System.out.println(messages[i].getDisplayMessageBody()); } try { Thread.sleep(30 * 1000); System.out.println("-------------------------------"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }<2>在AndroidManifest.xml當中進行注冊
<receiver android:name=".TestReceiver"> <intent-filter> <action android:name="android.intent.action.EDIT" /> </intent-filter> </receiver>
用這種方法注冊的有如下一種特點:
用這種方法注冊的應用程序的及時關閉了,BroadCastReceiver依然會接收到廣播出的一個對象,也就是說無論應用程序關與開,都處于一種活動狀態中,都接受到廣播事件。
有的應用程序就需要這種特點。
例如,開發一種應用程序,來檢測手機的耗電量。
我們不能總要求應用程序打開,我們希望應用程序及時關閉了,也能照樣檢測手機的耗電量。
但是,我們如果開發的應用程序來更新手機控件,采用這種方式就不太合適了。只有我們看到Activity,我們更新控件采用意義。
如果沒看到Activity還照樣更新,除了耗電,消耗內存外,一點好處也沒有。所以就需要第一種方法。
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!