android 广播机制 Broadcast

 

 

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中定义一个常量

 

private static final String SMS_ACTION="android.provider.Telephony.SMS_RECEIVED";

 

 b. 注册监听

 

 

//生成一个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里面就会打印出解析的信息

  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值