Android 的权限级别总共有4种

android:protectionLevel=[“normal” | “dangerous” | “signature” | “signatureOrSystem”]

  • normal: 低风险的权限,只要申请了就可以使用,在AndroidManifest.xml 中添加uses-permission
    标签,安装时不需要用户确认;正常的权限涵盖了应用需要访问其沙盒外部数据或者资源,但对用户的隐私或者其他应用操作风险很小。

  • dangerous: 高风险权限,安装时需要用户确认才可以使用。危险的权限常常设计用户隐私的信息,数据或者资源,或者对用户存储的数据或者其他应用的操作产生影响。

  • signature: 只有当申请权限的应用程序 (Android app) 的数字签名与 声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授予它。

这句话是什么意思呢,关于signature 的权限,举一个应用场景,其实两个app
之间是可以互相调用的,只要这两个app 是同一个开发者的签名。

  • signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。

下面用 http://www.voidcn.com/article/p-mxagzhgo-en.html 这篇文章里面的例子来说明

权限是在signature 的情况下, 创建两个应用(App,App1)只允许具有相同的签名的广播才可以接收;

App应用创建接收广播:


public class TestBroadReceiver extends BroadcastReceiver {//广播的Actionpublic static final String ACTION = "test_broad_cast_receiver";//传递值的Keypublic static final String KEY = "key";@Overridepublic void onReceive(Context context, Intent intent) {String data = "";if (intent.hasExtra(KEY))data = intent.getExtras().get(KEY).toString();//接收到广播时Toast提示内容Toast.makeText(context, context.getApplicationContext().getPackageName() + "接收静态广播" + (TextUtils.isEmpty(data) ?"" : ",数据:" + data), Toast.LENGTH_SHORT).show();}
}

注册广播:

<receiver  android:name=".BroadcastReceiverTest.TestBroadReceiver"><intent-filter><!--广播Action--><action android:name="test_broad_cast_receiver" /></intent-filter>
</receiver>

定义权限

<!--声明一个权限-->
<permissions  android:name="my_permision.send_broadcast_receiver" android:protectionLevel="signature" />
<!--添加权限-->
<uses-permission android:name="my_permision.send_broadcast_receiver" />

广播声明中添加权限

<receiver  android:name=".BroadcastReceiverTest.TestBroadReceiver" android:permission="my_permision.send_broadcast_receiver"><intent-filter android:priority="1000"><!--广播运用权限--><action android:name="test_broad_cast_receiver" /></intent-filter>
</receiver>

先在本应用中测试,期望会弹出带有“来自app测试”的Toast

private void sendStaticBroadCast() {Intent intent = new Intent();//传递数值intent.putExtra("key", "来自app测试");intent.setAction(TestBroadReceiver.ACTION);sendBroadcast(intent);}

打包签名

测试结果:
再创建测试App1应用,发送广播“test_broad_cast_receiver”

private void sendStaticBroadCast() {Intent intent = new Intent();//传递数值intent.putExtra("key", "来自app1测试");intent.setAction("test_broad_cast_receiver");sendBroadcast(intent);}

配制文件中设置(这里一定要添加上面自定义的权限):

<!--必须添加App应用中定义的权限-->
<uses-permission android:name="my_permision.send_broadcast_receiver" />

打包签名

测试结果:

打开应用时立即发送广播,app1 能够接受广播。

再次测试使用不同的签名,生成app1 打开app1,就没有触发广播接收方法了。


Reference

http://www.voidcn.com/article/p-mxagzhgo-en.html


写在后面的话

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程 https://www.cbedai.net/chichoxian

Android 的权限级别小记相关推荐

  1. android权限级别探索(四),Work Profile/Profile Owner的开启与功能

    一.什么是Work Profile   因为Work Profile在体验上与Device Owner和Device admin有很大的差别,所以在讲怎么开启profileOwner之前先讲一下什么是 ...

  2. android组件权限,Android中Permission权限机制的具体使用

    由上篇Android Permission权限机制引子,我们知道Android 通过在每台设备上实施了基于权限的安全策略来处理安全问题,采用权限来限制安装应用程序的能力.本篇文章继续来探讨和Andro ...

  3. android permission权限与安全机制解析(上)

    目录(?)[-] uses-permission 自定义permission permission标签 permission-tree标签 permission-group标签 安全机制 组件权限 权 ...

  4. Android安全机制(2) Android Permission权限控制机制

    http://blog.csdn.net/vshuang/article/details/44001661 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.概述 Andro ...

  5. Android 系统权限

    Android 是一个权限分隔的操作系统,其中每个应用都有其独特的系统标识(Linux 用户 ID 和组 ID).系统各部分也分隔为不同的标识.Linux 据此将不同的应用之间.应用与系统之间分隔开来 ...

  6. android安全权限管理,Android 11 中的权限更新

    在 Android 11 中,用户能够针对位置信息.麦克风和摄像头指定更精细的权限.此外,如果以 Android 11 或更高版本为目标平台的应用在一段时间内未使用,系统就会重置这些应用的权限.如果应 ...

  7. android cta 权限,[Android][Framework]PackageManagerService处理应用权限流程

    app种类 1.system app (有ApplicationInfo.FLAG_SYSTEM标记) 2.privileged app (有ApplicationInfo.FLAG_SYSTEM和A ...

  8. Android应用权限大全(Manifest.permission)

    前言 此处记录了Android中Manifest.permission类里的全部权限,方便日后使用. 戳此处查看官方文档→ Manifest.permission | Android Develope ...

  9. Android自定义权限CVE漏洞分析 (IEEE论文)

    文章目录 前言 自定义权限早期漏洞 1.1 Android权限机制 1.2 自定义权限升级漏洞 1.3 confused deputy attack 自定义权限近期漏洞 2.1 黑盒Fuzz工具原理 ...

最新文章

  1. mysql数据库入门教程(10):标识列和事务
  2. (转载) Linux IO模式及 select、poll、epoll详解
  3. startup毕业论文
  4. 如何将实时计算 Flink 与自身环境打通
  5. Android SDK实例之Snake游戏深入解析(一)
  6. 【数字图像处理系列二】基本概念:亮度、对比度、饱和度、锐化、分辨率
  7. espritcam后处理教学_Master CAM 后置处理文件及其设定方法详细说明
  8. 基于TCP/IP实现串口到网络的通讯转换
  9. pwnable-passcode
  10. 错误集——在线源报未知错误Could not resolve host
  11. php后台登录,简单的PHP数据后台实现用户登录,php后台用户登录
  12. 高性能分布式执行框架——Ray
  13. Oracle同步数据到MySQL
  14. ADAS中国术语标准
  15. 年产10000吨餐厨垃圾制备氨基酸有机肥工厂设计
  16. Docker镜像报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cance
  17. 7-68 城市间紧急救援 (25 分)
  18. Linux_cmd_basic
  19. 松下linux拍照手机,松下超级拍照智能手机CM1实拍样张
  20. javascript和java哪个快_Javascript与Java相比有多快?

热门文章

  1. 京东裁员杀红眼了!说要给n+1,员工签字后,公司又反悔了!
  2. token 的设计方案
  3. 收款神器!解读聚合收款码背后的原理|原创
  4. 进击谷歌:多线程下程序执行顺序怎么稳定不乱?
  5. 我一顿操作把电脑弄崩了!!!数据全没了!!!我该怎么办?
  6. 绩效管理误区和乱象,你的企业存在吗?
  7. 关于中台的思考与尝试
  8. vivox50pro鸿蒙系统,vivo X50 Pro最适合用来拍风景,看看网友的作品就知道了
  9. mysql 5.7 json函数_Mysql5.7中对于JSON函数设置的案例详细说明
  10. python加减法视频教程免费_一起学opencv-python三十八(视频分析:背景减法)