广播和广播接收者
(1)广播:就是一对多,就是发送信息
(2)广播接收者:就是接收广播发送的消息并做处理
在Android中,广播接收者才是四大组件之一,广播不是
广播不会决定谁是接收者,只要是注册了该广播,那么就能成为该广播的接收者
接收系统发送的广播:比如,网络变化,开机状态,手机的状态
广播接收者的注册方式有两种
(1)动态的注册:在代码里面注册
灵活度比较高,但是当activity结束的时候必须解除注册
注册的步骤
(1)创建接收者对象
(2)创建intentFilter对象
(3)为intentFilter对象添加action
(4)注册: registerReceiver(networkReceiver,intentFilter);
解除注册:
调用unregisterReceiver(networkReceiver);
注册和解除注册的对象必须是同一个
(2)静态的注册:就是在清单文件中注册
使用的是receiver节点:
<receiver android:name=".NetworkReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
</intent-filter>
</receiver>
name属性指定了要监听的广播的类型
开机启动当前的app:
(1)监听开机的广播
(2)启动app:
步骤:
(1)开机启动action:android.intent.action.BOOT_COMPLETED
(2)在广播中启动activity,需要给intent设置标示
Intent intent1 = new Intent(context,MainActivity.class);
//在广播里面启动activity的时候需要设置一个标示,该标示表示将MainActivity放入任务栈
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
(3)需要权限:
发送自定义的广播:
广播的种类分为两种:
(1)无序广播
所有的接收者基本是同一时刻接收到广播,彼此之间没有任何的关系
(2)有序广播
优先级高的广播接收者会优先接收到广播信息,并且可以对广播数据进行修改或者拦截广播
发送无序广播:
步骤:(1)
发送广播的module
Intent intent = new Intent();
intent.setAction(“com.yunhe.unorderbroadcast”);
sendBroadcast(intent);
action必须要设置,否则匹配
(2)广播接收者module:
直接在清单文件中配置receiver就行了,action要跟发送广播设置的action 保持一致
发送有序广播:
(1)发送广播的module
sendOrderedBroadcast(intent,null,null,null,1,”100万”,null);
<receiver android:name=".MyThirdReceiver">
<intent-filter android:priority="400">
<action android:name="com.yunhe.orderedbroadcast"></action>
</intent-filter>
</receiver>
使用priority属性可以指定广播接收者的优先级,优先级越高的广播接收者优先接收到广播,并可以对广播进行拦截.