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>

      五:运行效果

      

  • 相关阅读:
    X-010 FriendlyARM tiny4412 uboot移植之移植网卡驱动TFTP用起来
    使用NFS启动Tiny4412开发板根文件系统
    《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
    《C专家编程》第三章——分析C语言的声明
    《C专家编程》第二章——这不是Bug,而是语言特性
    《C专家编程》第一章——C:穿越时空的迷雾
    《C与指针》读后感
    《C与指针》第十五章练习
    《C与指针》第十四章练习
    《C与指针》第十三章练习
  • 原文地址:https://www.cnblogs.com/menglin2010/p/2287923.html
Copyright © 2011-2022 走看看