zoukankan      html  css  js  c++  java
  • Android广播BroadcastReceiver 二

    BroadcastReceiver:

    在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:

    首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。

    当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。

    注册BroadcastReceiver有两种方式:

    一种方式是,静态的在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器。

    另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消时就调用 Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)

    另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。

    1.静态注册BroadcastReceiver:

    静态注册比动态注册麻烦点,先新建一个类继承BroadcastReceiver,如:

    clsReceiver2.java

    复制代码
    package com.testBroadcastReceiver;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;


    public class clsReceiver2 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Toast.makeText(context, "静态:"+action, 1000).show();

    }
    }
    复制代码

    然后到AndroidManifest.xml 添加receive标签

    <</span>receiver android:name="clsReceiver2">  
    <</span>intent-filter>
    <</span>action
    android:name="com.testBroadcastReceiver.Internal_2"/>
    </</span>intent-filter>
    </</span>receiver>

    第一个name是类名,即你的继承BroadcastReceiver的类的名字,里面实现了BroadcastReceive的onReceive()方法,来处理你接到消息的动作。

    第二个name是action的名称,即你要监听的消息名字(其它消息都会被过滤不监听)。

    2.动态注册BroadcastReceiver:

      主要代码部分为:

         IntentFilter intentFilter = new IntentFilter();

      intentFilter.addAction(String); //为BroadcastReceiver指定action,即要监听的消息名字。

         registerReceiver(MyBroadcastReceiver,intentFilter); //注册监听

         unregisterReceiver(MyBroadcastReceiver); //取消监听

      (一般:在onStart中注册,onStop中取消unregisterReceiver)

         private class MyBroadcastReceive extends BroadcastReceiver

         {

               public void onReceive(Context context, Intent intent)

               {

                   String action = intent.getAction();

                    if(intent.ACTION_BATTERY_CHANGED.equals(action)) //判断是否接到电池变换消息 

                    {

                       //处理内容

                     }

                }

          }

  • 相关阅读:
    Codeforces 798C
    Codeforces 777E
    Codeforces 801C Voltage Keepsake(二分枚举+浮点(模板))
    【NOIP 2017】宝藏
    利普希茨
    【NOIP2008】双栈排序
    捕老鼠
    失格
    【JZOJ4307】喝喝喝
    Blocks
  • 原文地址:https://www.cnblogs.com/laughingQing/p/4547781.html
Copyright © 2011-2022 走看看