Android學習筆記之廣播(2)

來源:互聯網
上載者:User

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{</p><p>public void onClick(View v) {<br />//產生一個BroiadcastReceiver對象<br />smsReceiver = new SMSReceiver();<br />//產生一個IntentFilter對象<br />IntentFilter filter = new IntentFilter();<br />//為IntentFilter添加一個Action<br />filter.addAction(SMS_ACTION);<br />//將BroadcastReceiver對象註冊到系統當中<br />TestBC2Activity.this.registerReceiver(smsReceiver, filter);<br />}</p><p> }</p><p> class UnRegisterReceiverListener implements OnClickListener{</p><p>public void onClick(View v) {<br />//解除BroadcastReceiver對象的註冊<br />TestBC2Activity.this.unregisterReceiver(smsReceiver);<br />}</p><p> }SMSReceiver.javapackage mars.testbc2;</p><p>import android.content.BroadcastReceiver;<br />import android.content.Context;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.telephony.SmsMessage;</p><p>public class SMSReceiver extends BroadcastReceiver{</p><p>@Override<br />public void onReceive(Context context, Intent intent) {<br />// TODO Auto-generated method stub<br />System.out.println("receive message");</p><p>//接受Intent對象當中的資料<br />Bundle bundle = intent.getExtras();<br />//在Bundle對象當中有一個屬性名稱為pdus,這個屬性的值是一個Object數組<br />Object[] myOBJpdus = (Object[]) bundle.get("pdus");<br />//建立一個SmsMessage類型的數組<br /> SmsMessage[] messages = new SmsMessage[myOBJpdus.length];<br /> System.out.println(messages.length);<br /> for (int i = 0; i<myOBJpdus.length; i++)<br /> {<br /> //使用Object數組當中的對象建立SmsMessage對象<br /> messages[i] = SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);<br /> //調用SmsMessage對象的getDisppalyMessageBody()方法,就可以得到訊息的內容<br /> System.out.println(messages[i].getDisplayMessageBody());<br /> }<br /> try {<br />Thread.sleep(30 * 1000);<br />System.out.println("-------------------------------");<br />} catch (InterruptedException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br />}</p><p>}<br />

 

<2>在AndroidManifest.xml當中進行註冊

<receiver android:name=".TestReceiver"><br /><intent-filter><br /><action android:name="android.intent.action.EDIT" /><br /></intent-filter><br /></receiver>

用這種方法註冊的有如下一種特點:

用這種方法註冊的應用程式的及時關閉了,BroadCastReceiver依然會接收到廣播出的一個對象,也就是說無論應用程式關與開,都處於一種活動狀態中,都接受到廣播事件。
有的應用程式就需要這種特點。

例如,開發一種應用程式,來檢測手機的耗電量。

我們不能總要求應用程式開啟,我們希望應用程式及時關閉了,也能照樣檢測手機的耗電量。

但是,我們如果開發的應用程式來更新手機控制項,採用這種方式就不太合適了。只有我們看到Activity,我們更新控制項採用意義。

如果沒看到Activity還照樣更新,除了耗電,消耗記憶體外,一點好處也沒有。所以就需要第一種方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.