BroadCastReceiver概念与使用
2017-12-29 06:31
302 查看
BroadCastReceiver是Android程序的四大组件之一。
BroadCastReceiver实际是广播的接收器,可以对BroadCast(广播)进行过滤,接收,处理的一个类。
使用的方式如下:
广播发送:
将信息(要发送的信息,过滤用的信息。如:Action,Category)添加到一个Intent对象中,然后通过相应的方法将Intent对象作为广播发送出去。
如:
sendBroadcast();
sendOrderedBroadcast();
sendStickyBroadcast();
广播接收:
当Intent对象被发送以后,所有已经加载的BroadCastReceiver会检查加载时的IntentFilter是否与被发送的Intent相匹配,若匹配,会调用BroadCastReceiver的onReceive方法。
所以定义BroadCastReceiver时,要实现onReceive方法。
注:BroadCastReceiver的加载方式有动态加载和静态加载。
注:BroadCastReceiver的生命周期只有十秒左右,所以不要在BroadCastReceiver中做耗时操作。
建议通过Intent让Service做。
广播类型:
普通广播:所有监听该广播的BroadCastReceiver都能收到该广播。
有序广播:按照BroadCastReceiver的优先级顺序接收广播,优先级在intent-filter中的priority中定义,-1000到1000之间,值越大,优先级越高,可以终止广播的继续传播,接收方也可以修改广播内容。
异步广播:不能将处理结果传给下一个接收方,也无法终止。
总结:
普通广播的特点:
4000
1. 同级别接收先后顺序是随机的(无序)。
2. 级别低的后收到广播。
3. 接收方不能截断广播的继续传播也不能处理广播。
4. 同级别动态注册高于静态注册。
有序广播特点:
1. 同级别接收顺序是随机的。
2. 能截断广播的继续传播,高级别的BroadCastReceiver收到该广播后,可以决定是否截断该广播。
3. BroadCastReceiver能截断广播的继续传播,也能处理广播。
4. 同级别动态注册高于静态注册。
静态加载例:
定义BroadCastReceiver:
public class BCR extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));
}
}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //此处为设置过滤信息。
inte.putExtra("msg","内容");
sendBroadcast(inte);静态加载:
//在记录文件中,application标签内。
<receiver android:name="此处省略">
<intent-filter android:priority="优先级-1000到1000">
<action android:name="GL_1"/>
</intent-filter>
</receiver>
动态加载例:
定义BroadCastReceiver:
public class BCR2 extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));
}
}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //设置过滤信息
inte.putExtra("msg","内容");
sendBroadcast(inte);动态加载:
//在Activity中。
IntentFilter intentfilter=new IntentFilter("GL_1");
//上为过滤
BCR2 bcr2=new BCR2();
registerReceiver(bcr2,intentfilter);
有序广播例:
//发送有序广播。
Intent inte2=new Intent();
inte2.putExtra("msg","有序广播");
inte2.setAction("GL_1");
sendOrderedBroadcast(inte2,null);
BroadCastReceiver实际是广播的接收器,可以对BroadCast(广播)进行过滤,接收,处理的一个类。
使用的方式如下:
广播发送:
将信息(要发送的信息,过滤用的信息。如:Action,Category)添加到一个Intent对象中,然后通过相应的方法将Intent对象作为广播发送出去。
如:
sendBroadcast();
sendOrderedBroadcast();
sendStickyBroadcast();
广播接收:
当Intent对象被发送以后,所有已经加载的BroadCastReceiver会检查加载时的IntentFilter是否与被发送的Intent相匹配,若匹配,会调用BroadCastReceiver的onReceive方法。
所以定义BroadCastReceiver时,要实现onReceive方法。
注:BroadCastReceiver的加载方式有动态加载和静态加载。
注:BroadCastReceiver的生命周期只有十秒左右,所以不要在BroadCastReceiver中做耗时操作。
建议通过Intent让Service做。
广播类型:
普通广播:所有监听该广播的BroadCastReceiver都能收到该广播。
有序广播:按照BroadCastReceiver的优先级顺序接收广播,优先级在intent-filter中的priority中定义,-1000到1000之间,值越大,优先级越高,可以终止广播的继续传播,接收方也可以修改广播内容。
异步广播:不能将处理结果传给下一个接收方,也无法终止。
总结:
普通广播的特点:
4000
1. 同级别接收先后顺序是随机的(无序)。
2. 级别低的后收到广播。
3. 接收方不能截断广播的继续传播也不能处理广播。
4. 同级别动态注册高于静态注册。
有序广播特点:
1. 同级别接收顺序是随机的。
2. 能截断广播的继续传播,高级别的BroadCastReceiver收到该广播后,可以决定是否截断该广播。
3. BroadCastReceiver能截断广播的继续传播,也能处理广播。
4. 同级别动态注册高于静态注册。
静态加载例:
定义BroadCastReceiver:
public class BCR extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));
}
}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //此处为设置过滤信息。
inte.putExtra("msg","内容");
sendBroadcast(inte);静态加载:
//在记录文件中,application标签内。
<receiver android:name="此处省略">
<intent-filter android:priority="优先级-1000到1000">
<action android:name="GL_1"/>
</intent-filter>
</receiver>
动态加载例:
定义BroadCastReceiver:
public class BCR2 extends BroadCastReceiver
{
public void onReceive(Context con,Intent intent)
{
System.out.println(intent.getStringExtra(msg));
}
}发送普通广播:
Intent inte=new Intent();
inte.setAction("GL_1"); //设置过滤信息
inte.putExtra("msg","内容");
sendBroadcast(inte);动态加载:
//在Activity中。
IntentFilter intentfilter=new IntentFilter("GL_1");
//上为过滤
BCR2 bcr2=new BCR2();
registerReceiver(bcr2,intentfilter);
有序广播例:
//发送有序广播。
Intent inte2=new Intent();
inte2.putExtra("msg","有序广播");
inte2.setAction("GL_1");
sendOrderedBroadcast(inte2,null);
//以下为先接收到广播的BroadCastReceiver。 public class BCR extends BroadCastReceiver { public void onReceive(Context con,Intent intent1) { System.out.println(intent1.getStringExtra("msg")); Bundle bun=new Bundle(); bun.putString("data","处理结果"); setResultExtras(bun); //将处理结果设置进去。 } }
//以下为后接收到广播的BroadCastReceiver。 public class BCR2 extends BroadCastReceiver { public void onReceive(Context con,Intent intent2) { System.out.println(intent2.getStringExtra("msg")); Bundle bun=new Bundle(); bun=getResultExtras(true); //是否要接收处理结果 String bunstr=bun.getString("data"); System.out.println(bunstr); } }
相关文章推荐
- Android BroadcastReceiver的简单使用
- android Notification与BroadcastReceiver结合使用
- BroadcastReceiver中使用自定义Permission
- Android中广播接收者BroadcastReceiver使用
- 第二十一讲:Broadcast Receiver 使用入门
- Android的短信接收处理----Broadcast和Receiver的使用
- Android中BroadCastReceiver使用
- 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
- Android中广播接收者BroadcastReceiver的理解与基本使用
- Android BroadcastReceiver之快速上手使用广播
- BroadcastReceiver简单使用
- Subscriber使用可参考-------Android中BroadCastReceiver使用
- 使用Service和BroadcastReceiver实时监听网络状态
- android BroadcastReceiverd的简单使用
- Android四大组件之BroadcastReceiver的使用
- 广播接收者BroadcastReceiver的使用
- 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
- Android Service、Activity、BroadcastReceiver简单使用
- 第二十一讲:Broadcast Receiver 使用入门
- Android的四大组件之一 BroadcastReceiver多种广播接收器的灵活使用