zoukankan      html  css  js  c++  java
  • Android深入浅出系列之广播机制—1Android中的广播机制

      阅读目录

      一:什么是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>

      五:运行效果

      

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/menglin2010/p/2287923.html
Copyright © 2011-2022 走看看