BroadcastReceiver广播传递信息
2015-11-09 18:55
465 查看
BroadCast 广播用于程序间的接收、过滤、并处理信息。同时,广播实现方式分为静态广播和动态广播
静态广播:需要在manifest中注册实现。
广播端,继承BroadcastReceiver 重写onReceive()方法处理接收的信息
发送信息端, 此处采用按钮点击发送(activity端)
做到此处,广播的静态实现方式就可以实现了。
但此时还应该注意一个问题:在我们处理信息时在onReceive()方法中不能过久的处理信息,超过10秒左右的耗时操作就会报错(因为广播的生命周期为10秒左右)。
广播的分类:1、普通广播(无序广播) (Normal broadcasts)、大多数情况下使用的
2、有序广播
(Ordered broadcasts)、广播依次发送,有权限问题,看了一下网上大多数情况下说的是权限在-1000到1000之间,数值越大,优先级越高,获取信息者可以更改和删除信息,但我也看到有说最大数值为integer 的最大值,即 2147483647,这个数值我也没有试过,如果用到的时候可以试一下。此方法在静态广播中实现
3、异步广播(粘性消息)
动态广播:在代码中注册实现
静态广播:需要在manifest中注册实现。
广播端,继承BroadcastReceiver 重写onReceive()方法处理接收的信息
public class MyBroadCast extends BroadcastReceiver { public static final String MY_SMS_BROADCAST = "com.example.broadcast.sms";//自定义广播标记实现,通过此来发送广播 public static final String SYSTEM_SMS_BROADCAST = "android.provider.Telephony.SMS_RECEIVED"; //系统定义字符标记 @Override public void onReceive(Context arg0, Intent arg1) { String action = arg1.getAction(); if (action.equals(MY_SMS_BROADCAST)) { //实现过滤
<span style="white-space:pre"> </span>//接收处理信息 Toast.makeText(arg0, "处理自定义短信广播", Toast.LENGTH_SHORT).show(); }else if (action.equals(SYSTEM_SMS_BROADCAST)) {
<pre name="code" class="html"><span style="white-space:pre"> </span>//接收处理信息Toast.makeText(arg0, "处理系统接收短信", Toast.LENGTH_SHORT).show();}}}
发送信息端, 此处采用按钮点击发送(activity端)
mSMSBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MyBroadCast.MY_SMS_BROADCAST); //将消息发送到标记端 sendBroadcast(intent); } });在manifest中的注册
<receiver android:name="com.example.broadcast.MyBroadCast"> <intent-filter> <!-- 自定义注册过滤 --> <action android:name="com.example.broadcast.sms"></action> <!-- 系统接收短信过滤 --> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver>同时此处运用手机系统所有的功能时应加上权限,此处用到系统短信接收,应加上接收权限
<!-- 广播接收处理短信权限 --> <uses-permission android:name = "android.permission.RECEIVE_SMS" />
做到此处,广播的静态实现方式就可以实现了。
但此时还应该注意一个问题:在我们处理信息时在onReceive()方法中不能过久的处理信息,超过10秒左右的耗时操作就会报错(因为广播的生命周期为10秒左右)。
广播的分类:1、普通广播(无序广播) (Normal broadcasts)、大多数情况下使用的
2、有序广播
(Ordered broadcasts)、广播依次发送,有权限问题,看了一下网上大多数情况下说的是权限在-1000到1000之间,数值越大,优先级越高,获取信息者可以更改和删除信息,但我也看到有说最大数值为integer 的最大值,即 2147483647,这个数值我也没有试过,如果用到的时候可以试一下。此方法在静态广播中实现
<intent-filter android:priority="2147483647" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter>
3、异步广播(粘性消息)
动态广播:在代码中注册实现
public class DynamicBroadCast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("com.example.broadcast")) { //当有多个标志时起作用,此处可省略 //处理信息 } } }
public void reciverBroadCast(){ receiver = new DynamicBroadCast(); IntentFilter filter = new IntentFilter(); filter.addAction("com.example.broadcast"); //过滤标志 registerReceiver(receiver, filter); //动态注册 }注册时建议在onResume()中注册(与activity生命周期绑定)
@Override protected void onResume() { super.onResume(); reciverBroadCast();//注册 }取消时建议在onPause()中
@Override protected void onPause() { super.onPause(); if (receiver !=null) { unregisterReceiver(receiver); //取消注册 } }在与service生命周期绑定时为oncreat()和ondestroy()中
相关文章推荐
- Makefile中的“= := ?=”
- 正确使用Block避免Cycle Retain和Crash
- 大道至简读后感---从编程到工程
- js中冒号的作用
- JVM调优总结(十)-调优方法
- UVA10603倒水问题加优先队列
- KaokaoSDK接入备注
- eclipse远程调试hadoop2.6
- timit运行示例二
- webservice的理解
- 【学习总结】整理一下int, NSInteger 等概念
- 单词翻转(C程序设计进阶第3周)
- timit运行示例一
- std::vector元素去重方法
- JAVA模拟POST请求
- Kafka目录
- 从烈火网下载HTTP代理de例子
- adb使用网络连接
- Anaconda使用入门
- 如何在Fragment中使用findViewById呢?