一、Android广播机制介绍
Android:操作系统
BroadcastReceicer:广播接收器,需要注册到Android系统上
事件:如接到短信、电话
二、BroadcastReceiver的作用
每一个BroadcastReceiver都是用来处理不同的事件对象的,Android操作系统产生一个事件的时候,Android就会通知所有BroadcastReceiver产生一个事件,每个BroadcastReceiver就会判断是否是事件是否是自己要处理的事件,如果是当前BroadcastReceiver的事件,才会接收。指明每一个BroadcastReceiver是处理哪个事件,注册到Android操作系统上去主要是在AndroidManifest.xml中设置(是在application标签内)。
<receiver android:name=".TestBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver>Receiver标签的android:name属性表示将哪一个BroadcastReceiver注册到操作系统上面,filter标签上表示当前BroadcastReceiver是处理哪一类的事件动作的。
Action指的是当前操作是什么类型,即处理数据的方法。data表示将要操作的数据。要想把广播发送出去必须调用sendBroadcast方法。
三、BroadcastReceiver的编写
一个小例子,在BroadcastReceiverActivity中有个按钮,点击发送一个广播,同时在TestBroadcastReceiver中接收。
![](http://dl.iteye.com/upload/attachment/572327/9b5b5c44-46cf-369f-8e1c-88fa801762db.png)
BroadcastReceiverActivity.java
——发送广播
package com.android.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class BroadcastReceiverActivity extends Activity {
private Button broadcast = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
broadcast = (Button)findViewById(R.id.broadcast);
broadcast.setText("测试广播机制");
broadcast.setOnClickListener(new BroadcastListener());
}
class BroadcastListener implements OnClickListener{
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_EDIT);
BroadcastReceiverActivity.this.sendBroadcast(intent);
}
}
}
TestBroadcastReceiver.java
——接收广播
package com.android.activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class TestBroadcastReceiver extends BroadcastReceiver {
public TestBroadcastReceiver() {
System.out.println("TestBroadcastReceiver");
}
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("TestBroadcastReceiver --> onReceive");
}
}
AndroidManifest.xml
——注册接收广播类型
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.activity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BroadcastReceiverActivity" 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=".TestBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver> </application> </manifest>
输出结果:
![](http://dl.iteye.com/upload/attachment/572331/95ff25e1-dc43-387e-98bb-0e537d967f7b.png)
四、 BroadcastReceiver 的生命周期
TestBroadcastReceiver对象一旦生成就会调用该对象的onReceive方法,当方法返回时该对象就变成垃圾对象了,当再次发送广播时会重新声明TestBroadcastReceiver对象。