Android深入浅出系列之广播机制—Android中的广播机制(一)

本文详细阐述了Android系统中广播通信的工作原理,包括如何将广播接收器类注册到操作系统,以及如何响应系统事件。通过实例演示了如何在主活动页面触发广播,并在广播接收器中处理接收到的Intent对象,实现拨打电话的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前言

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

  思路

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

  实现步骤

   一:布局文件编写

   1.1:布局文件main.xml

   <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
      >
    <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="发送广播"
          android:id="@+id/br"
      />
   </LinearLayout>  

  二:代码文件编写

  2. 1:MainActivity.java

  package com.menglin.broadcastreceiver;

  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 MainActivity extends Activity
  {
     //声明一个Button对象btn
     private Button btn;
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
        super.onCreate(savedInstanceState);
        //加载布局文件main.xml
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.br);
        //给按钮绑定监听单击事件
        btn.setOnClickListener(listener);
     }
 
   //监听单击事件
   private OnClickListener listener = new OnClickListener()
   {
      @Override
      public void onClick(View v)
      {
         //创建一个新的Intent对象
         Intent intent = new Intent();
         //设置Intent对象的动作为拨打电话
         intent.setAction(Intent.ACTION_CALL);
         //发送广播
         sendBroadcast(intent);
      }
   };

  2.2 BroadcastReceiver.java

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

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

  package com.menglin.broadcastreceiver;

  import android.content.Context;
  import android.content.Intent;
  import android.util.Log;

  public class BroadcastReceiver extends android.content.BroadcastReceiver
  {
 
     private static final String Tag = "BroadcastReceiver";

     //构造函数
     public BroadcastReceiver()
     {
        Log.i(Tag, "构造函数");
     }

 

    //覆写onReceive()方法

     public void onReceive(Context context, Intent intent)
     {

        Log.i(Tag, "已接收");
     }

  }

  三:项目定义文件

  AndroidMainfest.xml

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

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.menglin.broadcastreceiver"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

      <application android:icon="@drawable/icon" android:label="@string/app_name">
          <activity android:name=".MainActivity"
                  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=".BroadcastReceiver">
               <intent-filter>
                   <action android:name="android.intent.action.CALL" />
               </intent-filter>
          </receiver>
      </application>
  </manifest>

  运行效果如下

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值