?
?
Broadcast(一)
?????????同一个广播可由不同的BroadcastReceiver来接受,实现不同的功能如接收短消息。
??????? 继承BroadcastReceiver,就需要重写BroadcastReceiver里面的onReceiver方法。同时需要早Manifest.xml中注册。
?
1简单小例子
????a. TestBCActivity extends Activity{}中
????
Intent intent=new Intent(); intent.setAction(intent.ACTION_EDIT); TestBCActivity.this.sendBroadcast(intent);
?
?b.接收器
public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("ddddddddd"); } }
??
?c.Manifest.xml中
?
<!--广播注册--> <receiver android:name=".TestReceiver"> <intent-filter > <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver>
?
?当activity发送广播时,配置文件会从多个RECEIVER 中寻找匹配的action来执行相应的操作。
?
?
Broadcast(二)
?? BroadcastReceiver注册方法有两种,
?1.在程序代码中注册
?2.在Manifest.xml中注册,如上例。特点是即使应用程序被关闭后,仍可接收广播。如监听电池电量。
?
这次着重在代码中注册,
?
? a.注册BroadcastReceiver
?????? ?registerReceiver(smsReceiver, filter);
?
? b.取消注册
???????
unregisterReceiver(smsReceiver);
?
? 一个接收短消息的例子
? a.在activity中定义一个常量 ? ? ?b. 注册监听private static final String SMS_ACTION="android.provider.Telephony.SMS_RECEIVED";
?
?
//生成一个BroiadcastReceiver对象 smsReceiver = new SMSReceiver(); //生成一个IntentFilter对象 //和Manifest中intent-filter标签的作用一样 //它是一个过滤器 它规定本receiver能够对哪些action发出的广播进行相应 IntentFilter filter = new IntentFilter(); //为IntentFilter添加一个Action filter.addAction(SMS_ACTION); //将BroadcastReceiver对象注册到系统当中 TestBCActivity.this.registerReceiver(smsReceiver, filter);
?
?c 取消注册
//解除BroadcastReceiver对象的注册 TestBCActivity.this.unregisterReceiver(smsReceiver);
?
?d receiver接收消息并解析
?
public class SMSReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { System.out.println("receive message"); //接受Intent对象当中的数据 //Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值 //Bundle的内部实际上是使用了HashMap<String, Object>类型 //它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt() 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()); } } }
?
?
e.同时不要忘了在配置文件中添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
?
? 当我们在ddms中发送消息的时候, ? ? ?
?
?
?
?
?logcat里面就会打印出解析的信息
??
?
?