广播接受者是(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);
}