广播
作用(以下“任务”均为瞬时任务或打开其他组件的任务)
-
本质
满足以下需求:任务的执行需要某信号的出现。(例如:当用户复制一段文字后,对复制内容进行处理)
-
接收系统中的广播
当在系统进行某些状态变化或事件发生时,需要对此执行一些任务。例如:网络状态改变(wifi断开)时,更新UI;用户关闭蓝牙时,停止相关蓝牙控制业务。
-
接收其他应用的广播或向其他应用发送广播
-
只接收应用内部的广播
需要执行符合第一点“本质”且执行范围仅在本应用内部的任务时,可使用广播机制。具体使用场景还没想到。
注册系统中的一些广播(有一些系统广播注册需要权限)
-
创建广播类(MyReceiver)
-
继承BroadcastReceiver类
-
实现onReceiver回调函数
在这里面编写收到广播消息时要做的业务逻辑
-
-
注册相关广播
-
创建意图过滤器实例IntentFilter
IntentFilter intentFilter = new IntentFilter();
-
在过滤器中添加需要“注意”的action(就是需要的消息)
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //意图为:网络连接改变
-
创建自定义广播(上一小节的MyReceiver)的实例
NetworkChangeReceiver networkChangeReceiver = new NetworkChangeReceiver();
-
将MyReceiver与意图过滤器进行绑定
registerReceiver(networkChangeReceiver,intentFilter);
-
-
取消注册
unregisterReceiver(networkChangeReceiver);
自定义广播
-
创建广播
-
创建自定义的action:可被其他Receiver按照上节方式注册
Intent intent = new Intent("包名.MYBROADACTION"); //参数部分为自定义广播消息,类似“android.net.conn.CONNECTIVITY_CHANGE”
-
-
发送广播
sendBroadcast(intent);
本地广播
此类广播只能在应用内部发送和注册,应用外无法收到此类广播消息
-
创建LocalBroadcastManager实例
- 这个类用来管理本地广播的注册与发送,其使用方式和上两节一致,只不过以上的方法要在此实例中调用(例如:localBroadcast.unregisterReceiver)
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);