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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!