BroadcastReceiver用於監聽被註冊的廣播事件。
註冊方式有兩種,一種代碼中註冊,一種在xml中定義。
<!--
註冊一個receiver
com.example.org.suju.lost.MyBroadcastReceiver類繼承BroadcastReceiver
-->
<receiver
android:name="com.example.org.suju.lost.MyBroadcastReceiver"
>
<!-- 增加一個intent過濾類型 只有符合其中的action的類型纔會接受廣播 -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
</intent-filter>
</receiver>
聲明在AndroidManifest.xml中的廣播
在Activity中註冊一個廣播接收器。
//註冊一個自定義的廣播接收器
br = new MMSBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(br, filter);
取消一個廣播接收器使用Activity的unregisterReceiver方法。
unregisterReceiver(br);
br是一個intent
自定義一個廣播接收器類,當來短信時,顯示短信內容。
public class MMSBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.d("log", "send sms");
Bundle bundle = intent.getExtras();
/*
* 顯示bundle中集合數據
* 我的sdk顯示有兩個key
* 一個是pdus object[]數組
* 一個是fromat 3gpp解碼格式
*/
for (String key: bundle.keySet()) {
Log.d("log", key);
Log.d("log", bundle.get(key).toString());
}
SmsMessage sms;
//bundle中有一個key爲pdus的object數組對象,裏面包含了短消息內容字節數組
Object[] pdus = (Object[])bundle.get("pdus");
for (Object obj: pdus) {
sms = SmsMessage.createFromPdu((byte[])obj);
Log.d("log", sms.getDisplayMessageBody());
}
}
}
發送廣播:
//新建一個Intent.ACTION_VIEW類型的intent。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra("name", "text");
intent.setClass(MainActivity.this, MyBroadcastReceiver.class);
//發送廣播,註冊了該類型的廣播接收者就會接受到。
sendBroadcast(intent);