android 广播




                        
android的广播机制中存在这三种不同的广播类型:
普通广播(Normalbroadcasts)
发送一个广播,所以监听该广播的广播接收者都可以监听到改广播。
异步广播
当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播.
有序广播(Orderedbroadcasts)
按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000
1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容.

普通广播的发送和接收:
sendBroadcast(intent);

?
代码片段,双击复制
01
02
03
04
05
06
< receiver android:name = ".MyBroadcastReceiver" >
            < intent-filter android:priority = "1000" >
              
< action android:name = "cn.lenovo.yangguangfu" />
</ intent-filter >
</ receiver >
1,他决定该广播的级别,级别数值是在-10001000之间,值越大,优先级越高;
2,同级别接收是先后是随机的;级别低的收到广播;
3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;
4,不能截断广播的继续传播,
5,实验现象,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。如果都没有优先级,代码注册收到为最先。
   
有序广播的发送和接收:
sendOrderedBroadcast(intent,receiverPermission);
sendOrderedBroadcast(intent,receiverPermission, resultReceiver,
       scheduler,initialCode, initialData, initialExtras)
receiverPermission这是权限,一个接收器必须持以接收您的广播。如果为null,不经许可的要求。 
resultReceiver
您自己BroadcastReceiver来当作最后的广播接收器。 
调度自定义处理程序,用以安排resultReceiver回调;如果为null将语境中的主线程举行。 
initialCode
一种结果代码的初始值。通常为Activity.RESULT_OK。这个值是-1;为其他int型也可以,如0,1,2; 
initialData
一种结果数据的初始值。通常情况下为空,String类型;
initialExtras
一种结果额外的初始值。通常情况下为空,Bundle;
1,  该广播的级别有级别之分,级别数值是在-10001000之间,值越大,优先级越高;
2,  同级别接收是先后是随机的,再到级别低的收到广播;
3,  同级别接收是先后是随机的,如果先接收到的把广播截断了,同级别的例外的接收者是无法收到该广播的。(abortBroadcast()
4,能截断广播的继续传播,高级别的广播收到该广播后,可以决定把该钟广播是否截断掉。
5,实验现象,在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。


异步广播的发送和接收:
sendStickyBroadcast(intent);
当处理完之后的Intent,依然存在,直到你把它去掉。
发这个广播需要权限<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />
去掉是用这个方法removeStickyBroadcast(intent);但别忘了在执行这个方法的应用里面AndroidManifest.xml同样要加上面的权限;
sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,
       initialCode,initialData, initialExtras)
这个方法具有有序广播的特性也有异步广播的特性;
发送这个广播要:<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />这个权限。才能使用这个方法。如果您并不拥有该权限,将抛出SecurityException的。
实验现象(sendStickyOrderedBroadcast()中),在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。

广播的接收顺序:
有序广播:
1,同等优先级的动态接收器,先注册的先接收
2,同等优先级的静态接收器,接收广播的顺序与String[] java.io.File.list()顺序一致 (new File("/data/app/").list()--包名)
3,如果静态接收器的优先级高于动态接收器的优先级,则静态接收器先接收到广播(如短信)

无序广播:
优先级高的动态接收器 > 优先级低的动态接收器 > 优先级高的静态接收器 > 优先级低的静态接收器

广播通知组件:
BroadcastReceive的基本知识:
      首先对BroadcastReceive的基本知识进行简单的介绍。希望通过下面的知识,读者可以对BroadcastReceive有一个初步的了解。
      1.广播接收器是一个专注于接受广播通知信息,并做出对应处理的组件。很多广播都是来自系统的,如通知电池电量过低、时间
发生变化等。普通的应用程序也可以进行广播,如通知其他应用程序该数据已下载完成并处于可用状态。
     2.应用程序可以拥有任意数量的广播接收器以对所有感兴趣的通知信息予以响应。所有的接收器均继承BroadcastReceive基类。
     3.广播接收器没有用户界面。
     4.广播事件的流程:注册广播事件:注册方式有2种,一种是静态注册,一种是动态注册;发送广播事件:通过Context.sendBroadcast
来发送,有Ineten来传递注册时用到的Action(行为,隐示的);接受广播事件:当发送的广播被接收器监听到后,会调用OnReceive()方法,
并将包含消息的Intent对象传回。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值