Android深入浅出系列之广播机制—1-Android中的广播机制

  阅读目录

  一:什么是BroadcastReceiver?

  二:布局文件编写

  三:代码文件编写

  四:项目定义文件编写

  五:运行效果

  一:什么是BroadcastReceiver?

    在现实生活中,当我们开车的时候,会听到交通台从广播里说“朝内大街拥堵”,如从这里通过的车辆请绕行,这就是广播,交通台是发送方,我们个人是接收方,至于我们到底在没在听交通台,我们也许在听郭德纲的相声,又或者我们虽听了交通台,要不要再走朝内大街是我们自己的事情了,所以在Android中也是一样的,广播只管发送数据,至于怎么接收数据和怎么处理数据就是接收方的事情了。

    对于我们来说,我们首先需要把广播接收器的类注册到Android的操作系统上面,让Android的操作系统知道,现在有一个广播接收器正在等待接收Android系统的广播了,当Android的操作系统产生一个事件的时候,比如说接到电话,Android操作系就会通知所有注册在它上面的BroadcastReceiver对象告诉它们产生了一个事件,是个什么样子的事件,这些BroadcastReceiver对象首先判断这个事件是不是我们这个接收器感兴趣的事件,不同的BroadcastReceiver对象可能处理不同的事件,如果是我需要或者感兴趣的事件,我在进行处理。

  二:布局文件编写

    main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3           android:orientation="vertical"
 4         android:layout_width="fill_parent"
 5         android:layout_height="fill_parent">
 6 
7   <Button android:layout_width="wrap_content" 8        android:layout_height="wrap_content"
9        android:text="发送广播"
10        android:id="@+id/br"/>
11</LinearLayout>

  三:代码文件编写

    3.1:MainActivity.java

 1    package com.menglin.broadcastreceiver;
 2 
 3   import android.app.Activity;
 4   import android.content.Intent;
 5   import android.os.Bundle;
 6   import android.view.View;
 7   import android.view.View.OnClickListener;
 8   import android.widget.Button;
 9 
10   public class MainActivity extends Activity
11   {
12      //声明一个Button对象btn
13      private Button btn;
14      @Override
15      public void onCreate(Bundle savedInstanceState)
16      {
17         super.onCreate(savedInstanceState);
18         //加载布局文件main.xml
19         setContentView(R.layout.main);
20         btn = (Button)findViewById(R.id.br);
21         //给按钮绑定监听单击事件
22         btn.setOnClickListener(listener);
23      }
24  
25      //监听单击事件
26      private OnClickListener listener = new OnClickListener()
27      {
28         @Override
29         public void onClick(View v)
30         {
31            //创建一个新的Intent对象
32            Intent intent = new Intent();
33            //设置Intent对象的动作为拨打电话
34            intent.setAction(Intent.ACTION_CALL);
35            //发送广播
36            sendBroadcast(intent);
37         }
38      };
39  }

   3.2 BroadcastReceiver.java

    这个类是继承自BroadcastReceiver的一个类,这个类的作用就是处理Android操作系统发出的广播事件。也就是说Android操作系统发出一个事件的广播,我们这个类负责接收,接收到之后就会调用onReceive()方法。

    这个BroadcastReceiver对象的生命周期什么时候结束呢?onReceive()方法被调用完毕,这个BroadcastReceiver对象就结束了,下次再接收广播在生成新的BroadcastReceiver对象。

 1 package com.menglin.broadcastreceiver;
 2 
 3 import android.content.Context;
 4 import android.content.Intent;
 5 import android.util.Log;
 6 
 7 public class BroadcastReceiver extends android.content.BroadcastReceiver
 8 {
 9   private static final String Tag = "BroadcastReceiver";
10   //构造函数
11   public BroadcastReceiver()
12   {
13     Log.i(Tag, "构造函数");
14   }
15 
16   //覆写onReceive()方法
17   public void onReceive(Context context, Intent intent)
18   {
19     Log.i(Tag, "已接收");
20   }
21 }

  四:项目定义文件编写

    AndroidMainfest.xml

    要想让BroadcastReceiver类能够接收到Android操作系统所发送的事件,就得把BroadcastReceiver类注册到Android的操作系统上,就需要这部分红色代码了,<intent-filter/>节点就是决定这个BroadcastReceiver类应该接收什么样类型的事件,<intent-filter/>是过滤器的意思,符合标准就让你通过,不符合标准就不让你通过,也就是说我们要通知一个广播接收器BroadcastReceiver需要发送Intent对象,如果Intent对象的ACTION符合<action android:name="android.intent.action.CALL" />就会启动这个BroadcastReceiver。这个节点是我们的广播接收器接收什么事件就是在这里来定义的。

 1 <?xml version="1.0" encoding="utf-8"?>
 2   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3       package="com.menglin.broadcastreceiver"
 4       android:versionCode="1"
 5       android:versionName="1.0">
 6     <uses-sdk android:minSdkVersion="8" />
 7 
 8       <application android:icon="@drawable/icon" android:label="@string/app_name">
 9           <activity android:name=".MainActivity"
10                   android:label="@string/app_name">
11               <intent-filter>
12                   <action android:name="android.intent.action.MAIN" />
13                   <category android:name="android.intent.category.LAUNCHER" />
14               </intent-filter>
15           </activity>
16       <receiver android:name=".BroadcastReceiver">
17                <intent-filter>
18                    <action android:name="android.intent.action.CALL" />
19                </intent-filter>
20           </receiver>
21       </application>
22   </manifest>

  五:运行效果

  

posted @ 2011-12-15 16:32  David.Meng  阅读(1723)  评论(0编辑  收藏  举报