权限有:

1.普通权限 normal

2.运行时权限 danger

<permission

android:name="android.permission.READ_CONTACTS" android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_readContacts" android:description="@string/permdesc_readContacts" android:protectionLevel="dangerous" />

3.Signature

权限被声明为Signature ,只有和该apk(定义这个权限的apk)有相同的私钥签名的应用才可以申请这个权限。

<!-- @hide @SystemApi @TestApi Allows an application to modify OBB files visible to other apps. --> <permission android:name="android.permission.WRITE_OBB" android:protectionLevel="signature|privileged" />

<!-- @SystemApi Allows read access to privileged phone state. @hide Used internally. --> <permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:protectionLevel="signature|privileged" />

4.signature & system

系统应用或者 和定义权限的apk有相同的签名,可以去获得这个权限

5.权限组是定义一组权限,如果当前一个权限组一个权限被赋予,那么这组权限都被赋予。

<!-- Used for runtime permissions related to user's SMS messages. --> <permission-group android:name="android.permission-group.SMS" android:icon="@drawable/perm_group_sms" android:label="@string/permgrouplab_sms" android:description="@string/permgroupdesc_sms" android:request="@string/permgrouprequest_sms" android:priority="300" />

1.申请动态权限的过程:

private void myRequetPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); }else { ...... } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { ...... }else {//选择禁止 ...... } }

2.运行时授权过程:

权限检查的过程:

PermissionManagerService.java

private int checkPermission(String permName, String pkgName, int callingUid, int userId) {              ......

final PackageParser.Package pkg = mPackageManagerInt.getPackage(pkgName);

if (pkg != null && pkg.mExtras != null) {

......

final PackageSetting ps = (PackageSetting) pkg.mExtras;

final boolean instantApp = ps.getInstantApp(userId);

final PermissionsState permissionsState = ps.getPermissionsState();

if (permissionsState.hasPermission(permName, userId)) {

......权限授予

}

if (isImpliedPermissionGranted(permissionsState, permName, userId)) {

return PackageManager.PERMISSION_GRANTED;} }

return PackageManager.PERMISSION_DENIED;

}

PermissionState.java

是权限检查的javabean对象,一个pkg有一个PermisssionState。 在app加载的时候权限授予情况:

3.权限组如何使用:

4.如何增加运行时权限:

5.adb 工具查看权限或者授予权限

查看所有的dangerous permissions:

adb shell pm list permissions –g –d

安装app并且对所有列在app manifest文件下的所有permission给予授权:

adb install -g <path_to_apk>

授权给某个app某个permission:

adb pm grant <package_name> <permission_name>

撤销授权:

adb pm revoke <package_name> <permission_name>

导出当前apk权限授予情况:

adb pull ./data/system/users/0/runtime-permissions.xml /di ./data/system/users/0/runtime-permissions.xml ./data/system/users/10/runtime-permissions.xml

android权限赋予流程相关推荐

  1. android京东打不开,京东商城Android权限申请流程分析

    京东动态申请定位权限分析 京东权限申请流程.png 1.安装完成后,权限状态为询问状态,此时,进入应用提示 首次进入App提示信息.png 1.1点击取消,对话框消失,Toast提示信息如下 需在手机 ...

  2. android 录屏流程以及权限管理(底层权限修改及讲解)

    android正常录屏流程需要申请权限,只需要调用正常的api,用户自己点击确定按钮,即可获取到录屏权限,上层app获取录屏权限的流程,废话不多说,下面看代码: public void takeScr ...

  3. android 动态申请权限_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  4. android 9.0 权限管理_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  5. Android权限管理原理(含6.0)

    前言 Android系统在MarshMallow之前,权限都是在安装的时候授予的,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态控制权限的目的,但由于不太成熟,在 ...

  6. 一篇文章看明白 Android PackageManagerService 工作流程

    Android - PackageMangerService 分析 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 ...

  7. android权限机制,你真的了解么

    android权限机制,你真的了解么 一.Android的权限机制 Android是目前最流行的智能手机软件平台之一,在智能移动终端如火如荼发展的同时,其安全态势也日益严峻.有调查表明,恶意软件的数量 ...

  8. Xamarin Android权限请求

    Xamarin Android权限请求 Android权限规定了App是否可以访问特定的资源,如网络.电话和短信.在原有API 6.0之前,App在安全的时候,会请求一次权限.一旦安装后,App就可以 ...

  9. 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程

    文章目录 一.加壳的 Android 应用启动流程 二.使用反射替换 LoadedApk 中的类加载器流程 一.加壳的 Android 应用启动流程 加壳的 Android 应用启动流程 : 加壳的 ...

最新文章

  1. python 定时任务
  2. Python面试必备—分布式爬虫scrapy+redis解析
  3. PHP基础封装简单的MysqliHelper类
  4. 去除inline-block元素间间距,比较靠谱的两种办法
  5. 前台使用三元运算符判断显示
  6. stm32 标准库一些比较容易犯的错误
  7. C++golden section search黄金分割搜索的实现算法(附完整源码)
  8. java面试题解惑_JAVA面试题解惑系列(五)——传了值还是传了引用?
  9. 2018年工业机器人销量排位_工业机器人年销量连续七年居世界首位 专家建议开辟新市场...
  10. java 对象引用传递
  11. SQL Server 日志传送
  12. paip.代码生成器数据源格式最佳实践
  13. 含泪整理最优质策略塔防游戏源代码素材,你想要的这里都有
  14. 自己动手编译android ffmpeg
  15. 89c52如何控制ad9833输出正弦波,三角波,方波。
  16. Vue3.0中文文档(Vue3 + TS学习资源路线)
  17. 阿里云平台购买域名 备案步骤
  18. python壁纸数据抓取_Python爬虫:爬取必应壁纸(可直接运行)
  19. 【Python】PEP8规范中一些需要注意的地方
  20. html5中分镜图文脚本,抖音分镜脚本这样做 轻松打造100w+粉丝大号

热门文章

  1. gin-vue-admin学习(后端篇)—— 3.GORM
  2. 计算机在线是什么,TIM电脑在线是什么意思?如何设置QQ显示tim电脑在线
  3. 对学习Eclipse的思考之基本入门介绍
  4. 大学生网络教学平台的设计与实现 毕业设计-附源码281819
  5. 音频 3A 处理实践,让你的应用更「动听」
  6. MySQL创建订单表
  7. 【Verilog】基本逻辑门代码(二)
  8. InfoQ 2018回顾,2019展望
  9. 优酷在线播放器 html5,GitHub - esterTion/Youku-HTML5-Player: 一个适配优酷的简单易用的HTML5播放器...
  10. List转String的几种方式