广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开始学习这门开发,并没有经常的用到这样技术,所以导致忘得非常的快,好了,废话少说,还是言归正传。
一、广播机制的注册和取消
说明:广播机制的注册分为两种,一种是想注册Activity一样,直接在AndroidManifest.xml文件中直接注册,另外一个中是动态方式注册,需要在Java源代码中去注册。
1、在AndroidManifest文件中注册。
<receiver android:name=".EditRecevier"> <intent-filter > <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver>
说明:.EditReceiver是实现广播机制的的类,android.intent.action.EDIT是具体要实现的什么广播机制,本例是实现一个编辑的。使用这种方式注册的广播机制是一直存在的,无法取消。
2、在Java源代码中动态注册广播机制
//声明Receiver对象 smsreceiver = new SmsReceiver(); //声明intent-filter对象 IntentFilter intentFilter = new IntentFilter(); //将filter添加到intent-filter对象中 intentFilter.addAction(SMS_ACTION); //使用registerReceiver()注册广播机制 MainActivity.this.registerReceiver(smsreceiver, intentFilter);
说明:首先声明实现广播机制的对象(短息)smsreceiver对象,然后声明intent-filter对象,永远指定广播机制的类型(本例是指短信),最后使用registerReceiver方法注册广播机制。使用这种方式注册的广播机制是可以取消的。
3、取消广播机制
//直接调用unregisterReceiver()方法注销广播机制 MainActivity.this.unregisterReceiver(smsreceiver);
说明:使用当前的Content对象调用unregisterReceiver方法直接取消广播机制
二、广播接收器的实现
说明:主要使用了BroadCastReceiver这个类,通过继承这个类,复写这个类的onReceive方法。在onReceive方法中对接收到的广播进行操控。
package com.example.android_broadcastreceiver2; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.gsm.SmsMessage; public class SmsReceiver extends BroadcastReceiver { public SmsReceiver() { // TODO Auto-generated constructor stub } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("SMSReceiver"); Bundle bundle = intent.getExtras(); Object[] objects = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[objects.length]; for (int i = 0; i < objects.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) objects[i]); System.out.println(messages[i].getDisplayMessageBody()); } } }
三、如何发布广播
@Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setAction(Intent.ACTION_EDIT); MainActivity.this.sendBroadcast(intent); }