BroadcastReceiver 动态注册
BroadcastReceiver 动态注册
如果一个BroadcastReceiver 用于更新UI,那么通常会使用这种方法去注册,在Activity启动时注册BroadcastReceiver ,在Activity不可见以后取消注册。
private Button registerButton = null;
registerButton = (Button)findViewById(R.id.register);
registerButton.setOnClickListener(new RegisterReceiverListener());
private SMSReceiver smsReceiver = null; //BroadcastReceiver
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";
class RegisterReceiverListener implements OnClickListener{
public void onClick(View v) {
//生成一个BroiadcastReceiver对象
smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction(SMS_ACTION);
//将BroadcastReceiver对象注册到系统当中
TestBC2Activity.this.registerReceiver(smsReceiver, filter);
}
}
取消注册:
class UnRegisterReceiverListener implements OnClickListener{
public void onClick(View v) {
//解除BroadcastReceiver对象的注册
TestBC2Activity.this.unregisterReceiver(smsReceiver);
}
}
BroadcastReceiver具体实现:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class SMSReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("receive message");
//接受Intent对象当中的数据
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()); //打印消息的正文内容
}
try {
Thread.sleep(30 * 1000);
System.out.println("-------------------------------");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、Android内置的Broadcast Actions有哪些?
D:\android-sdk-windows\docs\reference\android\content\Intent.html
Constants
ACTION_BATTERY_LOW Broadcast Action: Indicates low battery condition on the device.
原文地址:http://lemote.blog.163.com/blog/static/174839507201411682035736/

浙公网安备 33010602011771号