android广播发送与接收演示
Android 中有各式各样的广播,各种广播在Android系统中运行,当系统/应用程序运行时便会向 Android注册各种广播,Android接收到广播会便会判断哪种广播需要哪种事件,然后向不同需要事件的应用程序注册事件,不同的广播可能处理不同的事件也可能处理相同的广播事件,这时就需要Android系统为我们做筛选。
案例分析:
一个经典的电话黑名单,首先通过将黑名单号码保存在数据库里面,当来电时,我们接收到来电广播并将黑名单号码与数据库中的某个数据做匹配,如果匹配的话则做出相应的处理,比如挂掉电话、比如静音等等。
下面通过一个小DEMO来讲解一下广播在Android中如何编写,在Demo中我们设置了一个按钮为按钮设置点击监听通过点击发送广播,在后台中接收到广播并打印LOG信息。代码如下:
1.广播的发送
- public class BroadCastActivity extends Activity {
- public static final String ACTION_INTENT_TEST = "com.broadcast.test";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Button btn = (Button) findViewById(R.id.Button01);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent = new Intent(ACTION_INTENT_TEST);
- sendBroadcast(intent);
- }
- });
- }
- }
2.广播的接收与处理.
- //接收器代码如下:
- public class myBroadCast extends BroadcastReceiver {
- public myBroadCast() {
- Log.v("BROADCAST_TAG", "myBroadCast");
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Log.v("BROADCAST_TAG", "onReceive");
- }
- }
3.Android 如何判断并筛选广播?
前面说过 Android的广播有各式各样,那么Android系统是如何帮我们处理我们需要哪种广播并为我们提供相应的广播服务呢?这里有一点需要大家注意,每实现一个广播接收类必须在我们应用程序中的 manifest中显式的注明哪一个类需要广播,并为其设置过滤器
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.apkabc.broadcast" android:versionCode="1" android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <receiver android:name=".myBroadCast">
- <intent-filter>
- <action android:name="com.broadcast.test" />
- </intent-filter>
- </receiver>
- </application>
- </manifest>
小结:
在Android中如果要发送一个广播必须使用sendBroadCast向系统发送对其感兴趣的广播接收器中。
使用广播必须要有一个intent对象必设置其action动作对象
使用广播必须在配置文件中显式的指明该广播对象
每次接收广播都会重新生成一个接收广播的对象
在BroadCast中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity或者 Service 去处理