【android Broadcast】安全性~

来源:互联网 发布:新网中文域名 编辑:程序博客网 时间:2024/06/08 10:59

       在android系统中sendBroadcast和BroadcastReceiver。只要BroadcastReceiver指定的action和sendBroadcast action一致就可以就行消息接收。但是我们有这样的需求即我发送的广播不允许所有应用都可以接收广播消息,而是要经过发送者允许的才可以。比如某一个产品簇,每一个产品发送的广播消息只允许本簇内的产品才允许接收消息。其它应用即使action一样,也无法接收消息。这样就大大的提供了产品的安全性。那么如何实现呢?本文主要目的就是于此。

方法一:只允许本应用内允许接收。

解决方案:LocalBroadcastManager (局部广播)

优点:

1. 因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。

2. 不用担心别的应用伪造广播,造成安全隐患。

3. 相比在系统内发送全局广播,它更高效。

缺点:

1. 它只能够在同一个进程使用,如果本应用是多进程的。必须保证发送者和接收者是在同一个进程内

2. 它只能够动态注册和取消。

使用实例:

LocalBroadcastManager lbManager = LocalBroadcastManager.getInstance(this);lbManager.registerReceiver(mReceiver, inFilter);

/** * 方法一 * 获得LocalBroadcastManger实例,本应用进程内有效 */Intent cintent = new Intent();cintent.setAction("test");lbManager.sendBroadcast(cintent);

ps:这个方法要有support-v4.jar包才行

方法二、指定某一个应用允许接收。

解决方案:intent 指定包名Intent.setPackage设置广播仅对相同包名的有效

优点:

1.支持跨进程

2.receiver可以是静态注册也可以是动态注册。

3.只有指定的包名的应用程序才能够接收到数据,所以安全性较高。

缺点:

1.如果一旦反编译,很容易伪造广播,造成安全隐患

2.在系统内发生全局广播,它效率较低

3.它只能够满足一个应用的需求,不能够同时指定多个

使用实例:

/** * 方法二 * 指定包名 */Intent mIntent = new Intent();mIntent.setPackage("com.android.systemUI");mIntent.setAction("com.method.two");sendBroadcast(mIntent);

方法三、指定某一个receiver允许接收。

解决方案:intent 指定包名Intent. setComponent设置广播仅对相同包名的有效

优点:

1.可以指定到具体某一个receiver,安全性更高

2.receiver可以是静态注册也可以是动态注册。

缺点:

1.它只能指定一个receiver,局限性较大

使用实例:

/** * 方法三 * 指定receiver */Intent rIntent = new Intent();mIntent.setComponent(new ComponentName("com.android.systemUI", "com.android.systemUI.MyReceiver"));mIntent.setAction("com.method.three");sendBroadcast(rIntent);

方法四、指定多个应用有权接收。

解决方案:sendBroadcast(Intent, String)的接口在发送广播时指定接收者必须具备的permission。如果担心反编译后,权限被窃取,限制失效。可以在声明权限时,提高权限的

leverl为签名验证,即只有相同签名的应用且有该权限才能够接收,这样就能够满足产品簇的问题。

使用实例:

<permission android:description="@string/ttt"                    android:label="XXXX"     android:name=" com.method.permission"        android:protectionLevel=" signature"/>
<receiver    android:name="XXXX"    android:permission="com.method.permission" >    <intent-filter>        <action android:name ="*******" />    </intent-filter></receiver>
/** * 方法四 * 指定权限的 */Intent fIntent = new Intent();mIntent.setAction("com.method.whatever");sendBroadcast(fIntent, "com.method.permission");

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 螃蟹爬进厕所里怎么办 抄作业被老师发现怎么办 鱼把厕所堵了怎么办 刚憋尿上完厕所之后腹部很疼怎么办 小孩被老师投诉了家长怎么办 家长投诉被老师知道了怎么办 孩子上课不敢回答问题怎么办 孩子犯了错家长怎么办 错了不该错的题怎么办 不该错的题错了怎么办 小学生不爱写课堂作业怎么办 手被老师打肿了怎么办 老师反应孩子学习退步了怎么办 学护理的打屁股针怎么办 教师被投诉打学生怎么办 遇到内向的学生教师应该怎么办 教师遇到顽劣的学生怎么办 家长质疑老师的能力怎么办 和领导有冲突该怎么办 孩子叫也不听特别叛逆怎么办 孩子叛逆期不听妈妈的话怎么办 学生和老师反嘴怎么办? 两个月的宝宝不拉屎怎么办 老师受家长的气怎么办 家长故意在班级群里气老师怎么办 幼儿园阿姨体罚孩子家长该怎么办 学生钱丢了老师怎么办 胸肌一边大一边小怎么办 被爱的人抛弃了怎么办 深蹲以后腿疼怎么办 做完蹲起大腿疼怎么办 练腿之后腿疼怎么办 深蹲做完后腿疼怎么办 做完上下蹲腿疼怎么办 钓鱼子线长了怎么办 烤箱烤红薯没有锡纸怎么办 烤箱烤羊肉串滴油怎么办 黄金虎嘴脱臼了怎么办 孕妇吃了马头鱼怎么办 慈鲷鱼生完小鱼怎么办 买的烤鱼片刺多怎么办