标准广播:异步发送,同时发送给ABC
有序广播:顺序发送,先发送到A,然后再发送到B,再到C
广播注册方式:
1.静态注册:
可以实现开机自动启动应用程序
实现步骤:
1) 新建一个类继承BoardcastReceiver
2) 重写onReceive()
3) 清单中注册实现监听广播:什么监听器接收什么广播
<receiver ...>
<intent-filter>
<action ...>
4) 权限
2.动态注册:
灵活性强
实现步骤:
1) 新建一个类继承BoardcastReceiver
2) 重写onReceive()
3) 代码中注册实现监听广播
新建IntentFilter对象,添加要监听的action( addAction() )
新建MyReceiver对象,注册广播( registerBoardcast() )
4) 权限
发送自定义广播 sendBoardcast()
发送有序广播 sendOrderedBoardcast()
拦截广播(在前一个广播接收者接收后设置)abortBoardcast()
以上讲的发送广播,接收广播全部都是属于系统全局广播,即发送的广播可以被其他任何应用程序接收到,也可以接收到任何来自于其他任何应用程序的广播,容易引起安全性的问题
(广播是可以夹带数据的)
使用本地广播:广播只能在用用程序内部进行传递
实现步骤:
1) 新建一个类继承BoardcastReceiver
2) 重写onReceive()
3) 代码中注册
新建IntentFilter对象,添加要监听的action( addAction() )
新建MyReceiver对象,注册广播( registerBoardcast() )
新建LocalBroadcastManager(通过LocalBroadcastManager.getInstance(this)得到实例)
localBroadcastManager = LocalBroadcastManager.getInstance(this)
4)利用localBroadcastManager 发送/接收广播
localBroadcastManager .sendBroadcast(intent);//发送本地广播
localBroadcastManager .registerReceiver(receiver,intentFilter);//注册监听者接收广播
5)权限
本地广播是无法通过静态注册方式来接收的,因为要发送本地广播的话该应用程序必须先启动完成才可以发送,而静态注册是用来实现不启动应用程序也可以接收广播的,所以不适合。
在广播接收器里面启动活动要添加标志:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);