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);