1.Android的廣播機制介紹
當Android系統接收到一個事件後(如電話響、收到短信),觸發事件並能手廣播
2.BroadcastReceiver的作用
對有註冊廣播接收的程序進行廣播,通知其它感興趣的程序
3.BroadcastReceiver的編寫方法
1.在AndroidManifest.xml中註冊事件:
<receiver android:name=".TestReceiver">
<intent-filter>
<action android:name="android.intent.action.EDIT" />
</intent-filter>
</receiver>
2.創建一個類,繼承於BroadcastReceiver,用於接收廣播
public class BCReceiver extends BroadcastReceiver{
public void BCReceiver(){
}
@Override
public void onReceive(Context context, Intent intent){
System.out.println("receive a broadcast");
}
}
3.編寫一個類,用於發送廣播(測試用)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_EDIT);
CPActivity.this.sendBoardcase(intent);
4.BroadcastReceiver的生命週期
在Android系統接收到一個廣播時,會查找符合的廣播程序
如果符合intent-filter的話,則會創建一個廣播接收類
廣播接收類在觸發onReceive方法後,就會被銷燬,下次重新創建
5.註冊BroadcastReceiver的方法
BroadcastReceiver用於監聽被廣播的事件,爲了達到這個目的,BroadcastReceiver必須進行註冊,註冊的方法:
1.在應用程序的代碼當中進行註冊
2.在AndroidManifest.xml當中進行註冊(上節已介紹)
兩者區別:註冊在xml文件中的話,即使程序被關閉了,也會接收到廣播
代碼綁定廣、解除綁定播接收方法:
//代碼綁定廣播接收方法:
SmsReceiver smsReceiver = new SmsReceiver(); //創建監聽類
IntentFilter filter = new IntentFilter(); //創建過濾器
filter.addAction("android.provider.Telephony.SMS_RECEIVED"); //向過濾器添加動作
BCActivity.this.registerReceiver(smsReceiver,filter); //註冊廣播
//代碼解除綁定廣播接收方法:
BCActivity.this.unregisiterReceiver(smsReceiver);
在模擬器中發送短消息:
DDMS - Emulator Control - SMS中,填寫號碼和內容,點擊“Send”按鈕
接收廣播後的相關處理:
public void onReceive(Context context, Intent intent){
Bundle bundle = intent.getExtras(); //接收Intent對象中的數據
Object[] obj = (Object[])bundle.get("pdus"); //
SmsMessage[] messages = new SmsMessage[obj.length]; //創建短消息類型數組
for(int i=0; i<obj.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[]obj[i]); //獲取一條短信
System.out.println(messages[i].getDisplayMessageBody()); //打印消息體
}
}
6.Android內置的BroadcastReceiver
在幫助文檔中的Intent類頁面中,找到常量中有“Broadcast Action”的相關ACTION
ACTION_CAMERA_BUTTON //照相按鈕被點擊
ACTION_BATTERY_LOW //電池低電
ACTION_DATE_CHANGED //
ACTION_POWER_CONNECTIED //連接USB充電
ACTION_REBO0OT //重啓系統
ACTION_SCREEN_ON //屏幕被打開