Android广播sendBroadcast(intent,receiverPermission)解析
来源:互联网 发布:java入门书籍 编辑:程序博客网 时间:2024/06/06 15:35
http://blog.csdn.net/shineflowers/article/details/40426361
偶然看到发送广播的一个方法里带着多个参数,而大部分网上教程讲解的都是只带一个参数(intent)的sendBroadcase( ),所以决定对这个带多个参数的方法研究一下,过程甚是艰辛。
第二个参数从名字上来看,似乎是某个权限。关于自定义权限的问题,请看我另一篇博文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>
- sendBroadCastButton.setOnClickListener(new OnClickListener() {
- @Override
- public 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"/>
旧工程的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再改回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权限的发送者发送的广播我才会处理,跟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)的过程分析
- lua_code_cache off/on
- python mysql 学习笔记
- 猴子测试全网测试随机点击修改版
- 单链表的归并算法思路总结
- mybatis模糊查询
- Android广播sendBroadcast(intent,receiverPermission)解析
- BCG属性表单风格修改与删除“上一步”“下一步”“帮助”“确定”四个按钮
- Linux系统内存占用90%以上——解决方法
- uva 253 Cube painting
- 微信生成二维码
- Java内存模型
- Android Studio编译错误
- 游戏文件系统设计
- 百度地图开发之定位在太平洋或者大西洋或者北京故宫