android系统广播 定向广播,定向广播的几种方式
在android系统中sendBroadcast和BroadcastReceiver。只要BroadcastReceiver指定的action和sendBroadcast action一致就可以就行消息接收。但是我们有这样的需求即我发送的广播不允许所有应用都可以接收广播消息,而是要经过发送者允许的才可以。比如某一个产品簇,每一个产品发送的广播消息只允许本簇内的产品才允许接收消息。其它应用即使action一样,也无法接收消息。这样就大大的提供了产品的安全性。那么如何实现呢?本文主要目的就是于此。
一、只允许本应用内允许接收。
解决方案一:LocalBroadcastManager (局部广播)
优点:
1.因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。
2. 不用担心别的应用伪造广播,造成安全隐患。
3. 相比在系统内发送全局广播,它更高效。
缺点:
1. 它只能够在同一个进程使用,如果本应用是多进程的。必须保证发送者和接收者是在同一个进程内。
2. 它只能够动态注册和取消。
使用实例:
先通过LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);获取实例
然后通过函数 registerReceiver来注册监听器
registerReceiver(newBroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Handle the received local broadcast
}
}, newIntentFilter(XXXX));
通过 sendBroadcast 函数来发送广播
lbm.sendBroadcast(newIntent(XXXX));
解决方案二:intent 指定包名Intent.setPackage设置广播仅对本程序有效【见二】
二、指定某一个应用允许接收。
解决方案:intent 指定包名Intent.setPackage设置广播仅对相同包名的有效
优点:
1.支持跨进程
2.receiver可以是静态注册也可以是动态注册。
3.只有指定的包名的应用程序才能够接收到数据,所以安全性较高。
缺点:
1.如果一旦反编译,很容易伪造广播,造成安全隐患
2.在系统内发生全局广播,它效率较低
3.它只能够满足一个应用的需求,不能够同时指定多个
使用实例:
Intent intent = new Intent();
intent.setPackage("应用包名");
intent.setAction("消息action");
sendBroadcast(intent);
三、指定某一个receiver允许接收。
解决方案:intent 指定包名Intent. setComponent设置广播仅对相同包名的有效
优点:
1.可以指定到具体某一个receiver,安全性更高
2.receiver可以是静态注册也可以是动态注册。
缺点:
1.它只能指定一个receiver,局限性较大
使用实例:
Intent intent = new Intent();
intent. setComponent(newComponentName("包名", "Receiver类名"));
intent.setAction("消息action");
sendBroadcast(intent);
四、指定多个应用有权接收。
解决方案:sendBroadcast(Intent, String)的接口在发送广播时指定接收者必须具备的permission。如果担心反编译后,权限被窃取,限制失效。可以在声明权限时,提高权限的
leverl为签名验证,即只有相同签名的应用且有该权限才能够接收,这样就能够满足产品簇的问题。
使用实例:
AndroidManifest.xml
android:label="XXXX"
android:name=" com.test.permission"
android:protectionLevel=" signature">
android:name="XXXX"
android:permission="com.test.permission" >
Intent intent = new Intent();
intent.setAction("消息action");
sendBroadcast(intent, "com.test.permission");
注意:如果要求安全级别较高,使用签名验证机制即使优点又是缺点。目前还没有找到更好的方法,能够满足多个指定应用都能够接收消息,且安全级别不会受到伪造或窃取的风险。
android系统广播 定向广播,定向广播的几种方式相关推荐
- android模拟按键方法,Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...
- Android增强现实(一)-AR的三种方式(展示篇)
有一段时间没写博客了,事情比较多,博客进度有点跟不上了 1.Android增强现实(一)-AR的三种方式(展示篇) 2.Android增强现实(二)-支持拖拽控制进度和伸缩的VrGifView 3.A ...
- android 短信验证码自动填写的两种方式
https://blog.csdn.net/u010399316/article/details/48781319 https://www.01hai.com/note/av123438 https: ...
- Android之安全退出应用程序的几种方式
当我们做项目的时候,当用户在几秒的时间之内按回车键的时候,需要退出程序,但是退出我们要确保安全退出,防止还有程序还在后台运行,下面介绍几种安全的退出程的几种方式(综合了其它博客的然后加上自己使用的看到 ...
- android 通知打开app,Android打开通知栏并回到主页的几种方式
用PendingIntent.getActivity创建通知栏 在MainActivity中增加点击事件,用来启动NotifyService和延迟2秒销毁MainActivity,如下面代码所示 In ...
- Android实现资源动态加载的两种方式
这是Android Apk源加载机制原理分析以及动态加载实现系列文章 的最后一篇.经过前两篇的介绍之后,相关基础都讲的差不多了,现在要实现自己项目中的资源加载框架,这里提供两种方式,区别在于由谁来加载 ...
- Android中实现ImageView圆角化的几种 方式
开发中我们经常在显示图片相关需求的时候需要加载圆角图片,下面几种方式来实现图片的圆角化. 1:第一种方式是本人比较推荐的,直接在需要加载的图片外部嵌套一层CardView控件来实现图片 的圆角化,因为 ...
- Android在线预览pdf文件的几种方式
Android原生WebView不支持预览pdf文件,ios却可以,所以Android想要实现在线预览WebView要通过其他方法,有以下几种方法: 第一种方式: andorid原生自带的pdf管理库 ...
- android数据库侵入,Android中实现侵入式状态栏的两种方式
最近对"爸比讲故事"Android版本进行代码重构的时候,对之前版本的大部分界面的头部侵入式效果,作了一个总结和梳理,在期间查阅了thinkcool的博客和结合亲身实践,总结了2种 ...
- Android开发中配置JDK环境的几种方式
文章目录 一.前言 二.IDE设置 三.环境变量 四.gradle中配置 五.参考链接 一.前言 在Android开发中,配置JDK环境有以下几种方式来是Android项目正常编译 - changin ...
最新文章
- HR收到Dota天梯2000分玩家的简历,给不给面试的机会呢?
- 细节决定成败--打电话和发邮件的细节
- 循环神经网络(RNN, Recurrent Neural Networks)——无非引入了环,解决时间序列问题...
- Activity的使用(四):两个activity的交互
- linux 开放1701端口,长连接及Linux 查看长连接端口
- 安装ARM交叉编译工具
- 剑指offer(刷题31-40)--c++,Python版本
- 【31】将文件间的编译依存关系降至最低
- Java EE之Hibernate异常总结【5】java.lang.StackOverflowError[栈溢出]
- Python 性能分析入门指南
- 反向代理实现同域名下PHP和Java共存
- manifest.json文件的 “name” “description” “version 字段解释
- hbase常用命令及操作
- 富士施乐m115b怎么连接电脑_富士施乐m115b打印机驱动下载-富士施乐m115b驱动下载 v1.0.1.00官方版--pc6下载站...
- nginx 文件服务器 文件类型,如何配置Nginx限制文件类型?
- [转载] 中华典故故事(孙刚)——35 一文钱难倒英雄汉
- win32com处理excel数据透视表格式
- clickhouse 如何快速写入数据
- 打开任务管理器只显示任务 不显示进程了怎么办?
- 黄金百战穿金甲,搞懂数据结构与算法!!!送福利