android权限赋予流程
权限有:
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权限赋予流程相关推荐
- android京东打不开,京东商城Android权限申请流程分析
京东动态申请定位权限分析 京东权限申请流程.png 1.安装完成后,权限状态为询问状态,此时,进入应用提示 首次进入App提示信息.png 1.1点击取消,对话框消失,Toast提示信息如下 需在手机 ...
- android 录屏流程以及权限管理(底层权限修改及讲解)
android正常录屏流程需要申请权限,只需要调用正常的api,用户自己点击确定按钮,即可获取到录屏权限,上层app获取录屏权限的流程,废话不多说,下面看代码: public void takeScr ...
- android 动态申请权限_你真的了解Android权限机制吗?
码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...
- android 9.0 权限管理_你真的了解Android权限机制吗?
码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...
- Android权限管理原理(含6.0)
前言 Android系统在MarshMallow之前,权限都是在安装的时候授予的,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态控制权限的目的,但由于不太成熟,在 ...
- 一篇文章看明白 Android PackageManagerService 工作流程
Android - PackageMangerService 分析 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 ...
- android权限机制,你真的了解么
android权限机制,你真的了解么 一.Android的权限机制 Android是目前最流行的智能手机软件平台之一,在智能移动终端如火如荼发展的同时,其安全态势也日益严峻.有调查表明,恶意软件的数量 ...
- Xamarin Android权限请求
Xamarin Android权限请求 Android权限规定了App是否可以访问特定的资源,如网络.电话和短信.在原有API 6.0之前,App在安全的时候,会请求一次权限.一旦安装后,App就可以 ...
- 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
文章目录 一.加壳的 Android 应用启动流程 二.使用反射替换 LoadedApk 中的类加载器流程 一.加壳的 Android 应用启动流程 加壳的 Android 应用启动流程 : 加壳的 ...
最新文章
- python 定时任务
- Python面试必备—分布式爬虫scrapy+redis解析
- PHP基础封装简单的MysqliHelper类
- 去除inline-block元素间间距,比较靠谱的两种办法
- 前台使用三元运算符判断显示
- stm32 标准库一些比较容易犯的错误
- C++golden section search黄金分割搜索的实现算法(附完整源码)
- java面试题解惑_JAVA面试题解惑系列(五)——传了值还是传了引用?
- 2018年工业机器人销量排位_工业机器人年销量连续七年居世界首位 专家建议开辟新市场...
- java 对象引用传递
- SQL Server 日志传送
- paip.代码生成器数据源格式最佳实践
- 含泪整理最优质策略塔防游戏源代码素材,你想要的这里都有
- 自己动手编译android ffmpeg
- 89c52如何控制ad9833输出正弦波,三角波,方波。
- Vue3.0中文文档(Vue3 + TS学习资源路线)
- 阿里云平台购买域名 备案步骤
- python壁纸数据抓取_Python爬虫:爬取必应壁纸(可直接运行)
- 【Python】PEP8规范中一些需要注意的地方
- html5中分镜图文脚本,抖音分镜脚本这样做 轻松打造100w+粉丝大号
热门文章
- gin-vue-admin学习(后端篇)—— 3.GORM
- 计算机在线是什么,TIM电脑在线是什么意思?如何设置QQ显示tim电脑在线
- 对学习Eclipse的思考之基本入门介绍
- 大学生网络教学平台的设计与实现 毕业设计-附源码281819
- 音频 3A 处理实践,让你的应用更「动听」
- MySQL创建订单表
- 【Verilog】基本逻辑门代码(二)
- InfoQ 2018回顾,2019展望
- 优酷在线播放器 html5,GitHub - esterTion/Youku-HTML5-Player: 一个适配优酷的简单易用的HTML5播放器...
- List转String的几种方式