Android学习笔记(十一)——广播机制
来源:互联网 发布:微信公众号开发源码 编辑:程序博客网 时间:2024/05/22 14:37
Android广播机制和现实的广播差不多,Android发出一个事件的广播,然后所有BroadcastReveier都会接收到这个广播事件,但是只有和相应的BroadcastReveier相匹配的事件才会被接收处理。
BroadcastReveier用于监听被广播的事件,为了达到这个目的 ,必须对于进行注册,注册的方法有下面两种:
1、在应用程序的代码中进行注册;
registerReceiver(receiver,filter)用于注册BroadcastReceiver;
unregisterReceiver(Receiver)用于取消注册
2、在AndroidMainfest.xml中进行注册;
如果BroadcastReceiver用于更新UI,那么通常会使用第一种方法进行注册,在Activity启动的时候进行注册,在Activity不可见的时候取消注册;
第二种方法无论应用程序打开与否,都会接收到相应的广播事件,因此会占用一定的CPU资源;
下面的程序用上述两个方法进行编写:
Activity类:package gap.DCRC;import gap.receiver.SMSReceicer;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class BroadCastRCActivity extends Activity {private Button register;private Button unregister;private Button sendButton;private static String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";private SMSReceicer receiver; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //手动注册BroadcastReceiver register = (Button)findViewById(R.id.register); //手动解除BroadcastReceiver unregister = (Button)findViewById(R.id.unregister); //发送一个广播 sendButton = (Button)findViewById(R.id.send); register.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//创建一个IntentFilterIntentFilter filter = new IntentFilter();//加入相应的过滤机制filter.addAction(SMS_ACTION);receiver = new SMSReceicer();//注册BroadcastReceiverBroadCastRCActivity.this.registerReceiver(receiver, filter);System.out.println("register BroadcastReceiver");}}); unregister.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//解除BroadcastReceiverBroadCastRCActivity.this.unregisterReceiver(receiver);System.out.println("unregister BroadcastReceiver");}}); //发送一个广播 sendButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setAction(Intent.ACTION_EDIT);BroadCastRCActivity.this.sendBroadcast(intent);}}); }}
有两个继承BroadcastReceiver的类:
package gap.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class TestReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.out.println("onReceive");}}
package gap.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.gsm.SmsMessage;public class SMSReceicer extends BroadcastReceiver {@SuppressWarnings("deprecation")@Overridepublic void onReceive(Context arg0, Intent intent) {// TODO Auto-generated method stub//接受发送的的短信System.out.println("receive SMS");Bundle bundle = intent.getExtras();Object[] myObjPdus = (Object[])bundle.get("pdus");SmsMessage[] messages = new SmsMessage[myObjPdus.length];for (int i = 0; i < myObjPdus.length; i++){messages[i] = SmsMessage.createFromPdu((byte[]) myObjPdus[i]);System.out.println(messages[i].getDisplayMessageBody());}}}
AndroidMainfest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="gap.DCRC" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="4" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BroadCastRCActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="gap.receiver.TestReceiver"> <intent-filter > <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.RECEIVE_SMS"/></manifest>执行的结果:
- Android学习笔记(十一)——广播机制
- Android学习笔记——广播机制
- Android学习笔记——广播机制
- android学习笔记---广播机制
- android广播机制学习笔记
- Android学习笔记-广播机制
- Android学习笔记-广播机制
- Android学习笔记之广播机制(1)
- 【Android 学习笔记】 之 广播机制
- Mars Android视频学习笔记——01_21/22_广播机制
- Mars Android视频学习笔记——01_21/22_广播机制
- Android 四大组件 —— 广播(广播机制解析)
- Android 四大组件 —— 广播(广播机制解析)
- Android之广播机制—自定义广播
- Android之广播机制—有序广播
- Android之广播机制—本地广播
- Android学习--广播机制
- Android广播机制学习
- 读书列表
- Struts2项目搭建
- page-tagelib的使用例子
- TCP/IP:MSS MSL MTU
- Oracle笔记之三(Oracle中控制语句)
- Android学习笔记(十一)——广播机制
- page-tagelib分页web前端
- HDU--3987[Harry Potter and the Forbidden Forest] 求最小割集中的最小边数
- Everyday English
- swf 更新后,客户端不需要清空缓存即可查看最新版本
- VC6.0图像处理2--图像的反色
- IE6不能直接打开下载的文件的解决办法
- 编程小题^_^
- 多线程知识点整理