定义:广播是应用于系统、应用、控件、线程间消息响应的组件
常见广播分类:普通广播(无序广播) , 有序广播 , 粘性广播
使用广播思路:
1、注册receriver(静态或动态)
2、调用sendBroadcast()方法发送广播
3、onReceive(Contextcontext,Intentintent)方法处理广播
4、是否拦截
发送普通广播实现思路:
1、创建广播
2、注册广播(动态、静态)
3、发送广播,接收广播显示内容
步骤:
1、注册receriver(静态或动态)
2、调用sendBroadcast()方法发送广播
3、onReceive(方法处理广播)
广播三要素:
(1)广播发送者:发送广播
(2)广播接收者(调频):用于接收广播
(3)要处理的事情:处理广播的相关信息
意图有图对象广播的使用场景:
(1)同一app下多个组件之间传递数据(活动/片段/服务之间传递数据)
(2)2个app之间传递数据
广播注册方式:静态注册,动态注册
静态注册和动态注册的区别:假如说活动是接受者:
动态注册:
(1)广播会跟活性的生命周期的结束而结束;
(2)自由的控制注册和取消,有很大的灵活性
静态注册:
(1)广播不会跟随活性的生命周期的结束而结束,一直存在,即使应用程序关闭,也会被唤醒接受广播
(2)全局的广播
//----静态广播
//清单文件
<receiver
android:name=".MyStaticReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.bw.sta" />
</intent-filter>
</receiver>
//MainActivity
public void stareceiver(View view) {
Intent intent = new Intent();
intent.setAction("com.bw.sta");
Bundle bundle = new Bundle();
bundle.putString("name","hello");
bundle.putInt("age",20);
bundle.putFloat("money",20.3f);
intent.putExtras(bundle);
sendBroadcast(intent);
}
//Broadcast Recevier
@Override
public void onReceive(Context context, Intent intent) {
if ("com.bw.sta".equals(intent.getAction())){
Bundle bundle=intent.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
float money = bundle.getFloat("money");
Toast.makeText(context, "静态广播"+name+age+money, Toast.LENGTH_SHORT).show();
}
}
//----动态广播
//清单文件
<receiver
android:name=".MyDynReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.bw.dyn" />
</intent-filter>
</receiver>
//MainActivity
public void dyneceiver(View view) {
Intent intent = new Intent();
intent.setAction("com.bw.dyn");
Bundle bundle = new Bundle();
bundle.putString("name","world");
bundle.putInt("age",18);
bundle.putFloat("money",20.2f);
intent.putExtras(bundle);
sendBroadcast(intent);
}
//Recevier
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.bw.dyn")){
Bundle bundle=intent.getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
float money = bundle.getFloat("money");
Toast.makeText(context, "动态广播"+money+age+name, Toast.LENGTH_SHORT).show();
}
}