当前位置: 代码迷 >> Android >> android 播音机制 Broadcast
  详细解决方案

android 播音机制 Broadcast

热度:163   发布时间:2016-05-01 19:37:18.0
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里面就会打印出解析的信息

??

?

?

  相关解决方案