【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");
- 【android Broadcast】安全性~
- Android BroadCast
- Android Broadcast
- android broadcast
- android broadcast
- Android Broadcast
- android - broadcast
- android broadcast
- 【Android】Broadcast
- Android BroadCast
- Android broadcast
- Android - Broadcast
- android broadcast
- android broadcast
- Android Broadcast
- Android Broadcast
- Android broadcast
- android broadcast
- java 线程 start 方法 跟 run 方法的区别
- Python开发工具PyCharm个性化设置备份
- hah
- 使用eclipse编译android版本的libcurl
- shell基础一
- 【android Broadcast】安全性~
- c_语法入门_day2
- iOS 简单的倒计时封装
- MySQL与Oracle 差异比较之七用户权限
- 浅谈为什么大电容滤低频小电容滤高频
- jquery批量上传
- AVAudioPlayer
- VIM总结
- 创建ORACLE JOB