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/

posted @ 2014-11-08 15:01  克洛诺  Views(136)  Comments(0)    收藏  举报