BroadcastReceiver详解

BroadcastReceiver

定义:和事件处理器类似,但是事件处理器是程序组建级别,广播处理器是系统级别。当然我们必须先定义一个广播接收器,如

SmsBroadCastReceiver.java:

public class SmsBroadCastReceiver extends BroadcastReceiver    
{   
  
    @Override  
    public void onReceive(Context context, Intent intent)   
    {   
        Bundle bundle = intent.getExtras();   
        Object[] object = (Object[])bundle.get("pdus");   
        SmsMessage sms[]=new SmsMessage[object.length];   
        for(int i=0;i<object.length;i++)   
        {   
            sms[0] = SmsMessage.createFromPdu((byte[])object[i]);   
            Toast.makeText(context, "来自"+sms[i].getDisplayOriginatingAddress()+" 的消息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show();   
        }   
        //终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。   
        abortBroadcast();   
    }   
       
}  

然后想要调用广播接收器,让其对广播进行处理可以有两种方法,一种静态注册,一种动态注册。
一、静态注册:
发送的java文件
		@Override
		public void onClick(View v) {
			Intent intent = new Intent();
			intent.setAction(Intent.ACTION_EDIT);
			TestActivity.this.sendBroadcast(intent);
		}
在AndroidManifest.xml中配置广播:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="mars.testbc" android:versionCode="1" android:versionName="1.0">
	<application android:icon="@drawable/icon" android:label="@string/app_name">
		<activity android:name=".TestActivity" 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=".TestReceiver">
			<intent-filter>
				<action android:name="android.intent.action.EDIT" />
			</intent-filter>
		</receiver>
	</application>
	<uses-sdk android:minSdkVersion="4" />
	<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest> 

二、动态注册
@Override
		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);
		}

AndroidManifest.xml配置文件中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="mars.testbc2" android:versionCode="1" android:versionName="1.0">
	<application android:icon="@drawable/icon" android:label="@string/app_name">
		<activity android:name=".TestBC2Activity" 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="SMSReceiver">
			<intent-filter>
				<action android:name="android.provider.Telephony.SMS_RECEIVED" />
			</intent-filter>
		</receiver>-->
	</application>
	<uses-sdk android:minSdkVersion="4" />

	<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest> 













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值