图解Android四大组件之——广播接收器

先上一张图——整篇文章的精华
这里写图片描述

在广播接收器中是不允许开启线程的;广播是一种可以跨进程的通信方式

一.系统全局广播:发出的广播可以被其他任何应用程序接收到,也可以接收来自于其他任何应用程序的广播,因此容易引起安全问题(发送的广播被截断,接收到垃圾广播)

一)广播接收器:监听广播来得到各种系统的状态信息

1.创建:
1).新建一个类MyReceiver,继承BroadcastReceiver
2).重写onReceive方法(收到广播时的动作,比如提示,日志,做下一步操作)

2.注册
Android系统为了保证系统安全性,因此要声明权限,在AndroidMainfest.xml中添加<use-permission>

1)动态注册

 // 1.创建IntentFilter实例
        IntentFilter intentFilter = new IntentFilter();
        // 2.addAction(“广播名”),要监听什么,就添加什么广播名
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//网络变化是发出的广播就是“android.net.conn.CONNECTIVITY_CHANGE”
        // 3.调用registerReceiver()方法,把接收器(MyReceiver)和IntentFilter传进去
        myReceiver = new MyReceiver();
        registerReceiver(myReceiver, intentFilter);
        ......

//4.动态注册的广播接收器一定要取消注册,
 unregisterReceiver(myReceiver);

2)静态注册(在AndroidMainfest.xml中)

<receiver android:name=".receiver.MyReceiver">
            <intent-filter>
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED">

                </action>
            </intent-filter>
        </receiver>

二)发送自定义广播
1)标准广播:完全异步执行,所有广播接收器几乎都会在同以时刻接收到这条广播,没有先后顺序,不能截断,效率高。

//1.构建Intent对象(传入广播的值)

  Intent intent = new Intent("广播的值");
  //2.发送广播sendBroadcast(Intent)

                sendBroadcast(intent);

2)有序广播:同步执行的广播,同一时刻只有一个广播接收器可以收到,有顺序,可以被截断

//1.构建Intent对象(传入广播的值)
 Intent intent = new Intent("广播的值");
 //2.sendOrderedBroadcast(intent,null)
                sendOrderedBroadcast(intent,null);

如果想要设置顺序,可以在注册的时候设定优先级:

android:priority="100"

截断广播

abortBroadcast()

二.本地广播:发出和接收都只会在本应用程序的内部进行,无法通过静态注册的方式来接收,因此不需担心机密数据泄露问题;不需担心有安全漏洞的隐患;发送本地广播比发送全局广播更高效。
和系统全局广播大致相似,不过要通过LocalBroadcastManager.getInstence(this)获取
LocalBroadcastManager实例,然后在系统全局广播中的.registerReceiver(),unregisterReceiver(),sendBroadcast(),sendOrderedBroadcast()等方法由LocalBroadcastManager来管理调用。


学习参考:《第一行代码——Android》

猜你喜欢

转载自blog.csdn.net/weixin_36027342/article/details/79889088