Android_BroadcastReceiver(一)

原创 2016年05月31日 13:43:15

Android_BroadcastReceiver

作为一个Android小白,这是我的第一篇CSDN博客,这篇博客的主要内容介绍的是Android中的四大组件之一:广播

(BroadcastReceive),这些只是我的理解,如有差错,留言或者androidchw@163.com联系,谢谢。
Android中的广播主要分为两种形式:

标准广播(Normal Broadcasts)
一种异步执行的广播,所有的广播接收器几乎都在同一时刻接收到这条广播消息。它们之间没有任何顺序可言。这种广播的优点是效率比较高,但是这种广播无法拦截。并且在程序启动之后才能接收广播。
有序广播(Ordered Broadcastss)
一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播能接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传播。此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播,并且前面的广播可以拦截广播。

上面说的可能太书本话了,下面就让我举个例子帮助大家更好的理解标准广播和有序广播。    

标准广播
相信在帝都工作的程序猿都遇见过这种情况,公交车来了以后,人们都争先恐后的去公交车门那里挤公交。这就相当于系统发出一条广播,手机中的App争先恐后的抢这个广播。就像人们争先恐后的挤公交车一样,完全没有顺序可言。
标准广播
有序广播
相信大家上学的时候,都遇见过大扫除这个事情吧。老师先把大扫除的消息给卫生委员分布下去,卫生委员又把大扫除的消息分布给各个组长,组长又把大扫除的消息分布个各个组员。有序广播就是这样传播的。它是有先后顺序的,级别越高的获取广播也就越早,并且还能够拦截不让后面级别低的获取到广播。
有序广播
手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或者时区发生改变也会发出一条广播。一个广播的完成需要两个步骤:发送广播和接收广播。现在,我们就从最基础的接收系统广播开始学习吧。
如果你想了解更多有关Android系统的中的广播,可以查看 Android系统广播大全

现在我们就从最简单的接收系统广播开始学习吧,学习之前我们还是先了解一下广播的注册方式,Android中广播的注册方式有两种:(1)动态注册广播:在代码中注册。(2)静态注册广播:在AndroidManifest.xml中注册。

动态注册广播

public class MainActivity extends Activity {
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 动态注册广播
        intentFilter = new IntentFilter();
        //广播接收器想要监听什么样的广播,就在这里添加响应的action就行了。
        intentFilter.addAction("android.net.con.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netWorkInfo = connectivityManager.getActiveNetworkInfo();
            if (netWorkInfo != null && netWorkInfo.isAvailable()) {
                Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "network is not_available", Toast.LENGTH_SHORT).show();
            }
        }
    }

    // 这一步至关重要
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册的广播
        unregisterReceiver(networkChangeReceiver);
    }
}

接收系统网络变化的广播还需要权限,所以我们在AndroidManifest.xml中添加一个权限。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

静态注册广播
以下的代码主要是实现了开机启动的功能。

public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show();
    }
}

在AndroidManifest.xml中的静态注册广播的代码:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<receiver android:name=".BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android_BroadcastReceiver广播接收者详解及应用

1.概述 广播接收者(BroadcastReceiver)用于接收广播,在Android系统中,广播应用非常常见。例如当开机完成后系统会产生一条action为android.intent.actio...
  • strawberry2013
  • strawberry2013
  • 2013年08月16日 23:37
  • 2225

Mybatis一对一和一对多配置

问题描述 现在有三张数据表,表名为orders,orderdetail,items,分别表示订单,订单详情,商品。其中一个订单包含多个订单详情,表示订单中的不同个具体的商品,订单详情唯一对应一件商品。...
  • u011403655
  • u011403655
  • 2015年06月30日 01:48
  • 5376

一步一步走进Linux HOOK API(一)

文章转载自: http://blog.csdn.net/yyttiao/article/details/7346287 主要是拷贝到自己博客,做个备份 最近我查阅很多...
  • zhejiang9
  • zhejiang9
  • 2013年01月05日 21:34
  • 1130

Android BroadcastReceiver

  • 2014年10月23日 11:13
  • 2.16MB
  • 下载

指尖疯Android4.4视频第17集:BroadcastReceiver

  • 2014年08月02日 07:29
  • 1.13MB
  • 下载

Android自学笔记-17-广播接收者(BroadcastReceiver)

  • 2014年04月30日 23:15
  • 1.42MB
  • 下载

Android BroadcastReceiver

  • 2010年11月11日 10:26
  • 29KB
  • 下载

android服务自启动Service以及BroadcastReceiver和Notification

  • 2014年04月18日 13:33
  • 2.45MB
  • 下载

ANDROID---当网络发生变化时使用BroadcastReceiver和service通知

  • 2016年05月30日 12:00
  • 23.03MB
  • 下载

android mars视频代码 Broadcast TestBC2源码 BroadcastReceiver

  • 2011年03月11日 11:58
  • 43KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android_BroadcastReceiver(一)
举报原因:
原因补充:

(最多只允许输入30个字)