Android广播sendBroadcast(intent,receiverPermission)解析
来源:互联网 发布:mac snow ball peach 编辑:程序博客网 时间:2024/05/21 00:55
第二个参数从名字上来看,似乎是某个权限。关于自定义权限的问题,请看我另一篇博文Android自定义权限怎样设置。
先从最简单的开始入手。
1、AndroidManifest.xml中Receiver下的android:permission标签有什么用?网上绝大部分的解释是,对发送者设置的权限,也就是发送者必须拥有这个权限,发出的广播,Receiver才会处理。
2、sendBroadcast(intent,receiverPermission)中第二个参数有什么作用?依旧根据网上的解释,是对接收者Receiver做的权限设置,也就是Receiver必须拥有这个权限,才能处理它发出的广播。
姑且认为以上两种说法都是对的。现在做一个试验。创建一个工程,在AndroidManifest.xml中加入如下片段,自定义并使用一个权限:
<permission android:name="com.wild.wildwithflower.myper"/> <uses-permission android:name="com.wild.wildwithflower.myper"/>
Receiver如下配置:
<receiver android:name="com.wild.wildwithflower.WildReceiver" android:permission="com.wild.wildwithflower.myper" > <intent-filter android:priority="30"> <action android:name="guangbo"/> </intent-filter></receiver>在Activity中用一个按钮触发,发送广播,如下:
sendBroadCastButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//sendOrderedBroadcast(new Intent("guangbo"),android.Manifest.permission.BLUETOOTH);sendBroadcast(new Intent("guangbo"), Manifest.permission.myper);}});
也就是 发送者Activity说,要有myper权限的Receiver才能接收我发出的广播,而Receiver则说,要有myper权限的发送者发出的广播我才会处理,很显然,他们两个都有这个权限,所以广播最终会顺利执行。试验结果,跟网上的说法无冲突。
下面稍作改动 。AndroidManifest.xml中多自定义一个权限son,但并不使用它:
<permission android:name="com.wild.wildwithflower.myper"/> <uses-permission android:name="com.wild.wildwithflower.myper"/> <permission android:name="com.wild.wildwithflower.son"/>
Receiver中也稍作改动:
<receiver android:name="com.wild.wildwithflower.WildReceiver" <span style="background-color: rgb(204, 204, 204);"><span style="color:#ff0000;">android:permission="com.wild.wildwithflower.son"</span></span> > <intent-filter android:priority="30"> <action android:name="guangbo"/> </intent-filter> </receiver>
发送广播的代码不变动。即,Receiver说,有son权限的发送者发出的广播,我才会处理。而发送者Activity和Receiver本身都是没有son权限的。试着运行下,发现广播仍然成功处理了。这是怎么回事?跟网上的说法冲突了。先不管这个问题,继续往下探索。
再创建一个工程,并在这个新工程的AndroidManifest.xml中:
<uses-permission android:name="com.wild.wildwithflower.myper"/>即,获取myper这个权限。
旧工程的Receiver改回myper权限:
<receiver android:name="com.wild.wildwithflower.WildReceiver" android:permission="com.wild.wildwithflower.myper" > <intent-filter android:priority="30"> <action android:name="guangbo"/> </intent-filter></receiver>
接下来,在这个新工程的Activity中依旧用按钮触发:
sendBroadcast(new Intent("guangbo"), Manifest.permission.myper);也就是,旧工程的Receiver说,要有myper权限的发送者发出的广播我才处理,新工程说,要有myper权限的Receiver才能接收我的广播。运行发现,广播顺利完成。与网上说法无冲突。
继续。
旧工程的Receiver再改回son权限:
<receiver android:name="com.wild.wildwithflower.WildReceiver" android:permission="com.wild.wildwithflower.son" > <intent-filter android:priority="30"> <action android:name="guangbo"/> </intent-filter> </receiver>也就是,Receiver说,要有son权限的发送者发出的广播我才处理,而新工程的发送者Activity没有这个son权限。试着再用新工程发送广播,发现,广播并没有被处理。
于是,现在的情况是:
Receiver说要有son权限的发送者发送的广播我才会处理,跟Receiver同工程的Activity即使没有son权限依然能发出广播,Receiver也会处理它的广播,但是在另一个工程中,没有son权限的Activity发出的广播却不能被Receiver处理。
这是什么原因????
个人猜测,如果这不是android的一个bug,一个可能的原因就是,android认为,跟我在同一个应用中的组件都是朋友,不会伤害我,所以即使我朋友没有这个权限,它派来的任务我也会执行,但是另一个工程就不知道是敌是友了,它必须有这个权限(这在一定程度上说明它取得了通行证),我才会信任它。
- Android广播sendBroadcast(intent,receiverPermission)解析
- Android广播sendBroadcast(intent,receiverPermission)解析
- 发送广播sendBroadcast
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- Android应用程序发送广播(sendBroadcast)的过程分析
- 模拟器快捷键操作
- java应用技术 3(6)
- sql server 树状结构表中,获取指定节点的所有父节点路径
- Struts2-paramsPrepareParamsStack 拦截器栈
- iOS 开发博客汇总
- Android广播sendBroadcast(intent,receiverPermission)解析
- poi读取excel
- 引用传递与值传递
- ListView BaseAdapter的用法与性能优化
- 多维转一维的方法
- Ismael Bojang领跑WSOPE豪客赛
- C语言基础-二维数组
- CMD命令小结和个人心得
- 苹果开发的一些要求(汇总到这里)