当前位置: 首页 > news >正文

高通Android 12/13 默认应用程序授予权限

1、一提到权限很多Android开发者都会想到 比如拨打电话 读取手机通讯录 定位 这些都是需要申请权限,Google Android 6.0之后(sdk 23) 需要app动态申请权限 或者权限组

2、我这里打个比方 比如需要在fm应用 默认打开mic权限 

3、我们需要知道这个默认应用程序的包名 (例如 xxx.com等)

4、在PMS成功启动时并收到回掉systemReady回进行应用权限授予。如下代码所示

   @Overridepublic void systemReady() {// If we upgraded grant all default permissions before kicking off.for (int userId : grantPermissionsUserIds) {mDefaultPermissionPolicy.grantDefaultPermissions(userId);}}

5、根据默认应用包名packageName进行筛选 包括后面GMS认证一些应用默认关闭一些权限 方法都是类似 依葫芦画瓢哈 对应修改路径/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

 public void grantDefaultPermissions(int userId) {DelayingPackageManagerCache pm = new DelayingPackageManagerCache();grantPermissionsToSysComponentsAndPrivApps(pm, userId);grantDefaultSystemHandlerPermissions(pm, userId);grantSignatureAppsNotificationPermissions(pm, userId);grantDefaultPermissionExceptions(pm, userId);//add by zm 2023/3/6PackageInfo pkg = pm.getPackageInfo("xxx.com.fmradio");if ((pkg != null) && doesPackageSupportRuntimePermissions(pkg)) {setFMPackagePermissions(pm,pkg,userId);}//add end// Apply delayed statepm.apply();}

6、下面就是默认授权权限代码 如下所示 默认打开麦克风权限

public void setFMPackagePermissions(PackageManagerWrapper pm,PackageInfo pkg,int userId){
+               Log.e(TAG, "zm add setFMPackagePermissions is start");
+               grantRuntimePermissions(pm,pkg, MICROPHONE_PERMISSIONS, true, true, true, userId);
+               Log.e(TAG, "zm add setFMPackagePermissions is end");
+    }

7、高级一点的写法 根据list集合去过滤 后面还有其他的应用要打开一个 和多个或者关闭一个和多个权限 代码如下

  @SafeVarargsprivate final void grantPermissionsToSystemPackage(PackageManagerWrapper pm, String packageName,int userId, boolean systemFixed, Set<String>... permissionGroups) {if (!pm.isSystemPackage(packageName)) {return;}grantPermissionsToPackage(pm, pm.getSystemPackageInfo(packageName),userId, systemFixed, false /* ignoreSystemPackage */,true /*whitelistRestrictedPermissions*/, permissionGroups);}

8、使用示例 如下所示 电话权限、短信权限 、通知栏消息权限

 grantPermissionsToSystemPackage(pm, verifier, userId, PHONE_PERMISSIONS, SMS_PERMISSIONS,NOTIFICATION_PERMISSIONS);


9、然后编译代码 验证ok 到这里默认添加应用权限功能结束了。此文章只是抛砖引玉,具体其他平台根据项目实际需求进行修改,如有雷同,纯属巧合哈!

转载请注明出处谢谢  高通Android 12/13 默认应用程序授予权限_KdanMin的博客-CSDN博客

有一起想学framework可以加我wx (kdanmobile) 火热进行中 

其他学习链接

Android 中的权限  |  Android 开发者  |  Android Developers

http://www.lryc.cn/news/31820.html

相关文章:

  • 代码随想录|day6|哈希表篇-- 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和
  • k8s学习之路 | Day20 k8s 工作负载 Deployment(下)
  • 考研复试——操作系统
  • Java ~ Collection/Executor ~ LinkedBlockingDeque【源码】
  • 【前缀和】截断数组、K倍区间、激光炸弹
  • 函数编程:强大的 Stream API
  • 企业架构图之业务架构图
  • 监控易网络管理:网络流量分析
  • RHCSA-文件内容显示(3.6)
  • Qt多线程文件查找器
  • 源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat
  • 二值图像骨架线提取
  • 规划数据指标体系方法(上)——OSM 模型
  • 做程序界中的死神,继续提升灵力上限
  • [数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)
  • Java实验报告经验总结
  • ESP32使用TCP HTTP访问API接口JSON解析获取数据
  • spring security 实现自定义认证和登录(4):使用token进行验证
  • 戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)
  • 信息收集之Google Hacking
  • 【面试题】如何避免使用过多的 if else?
  • oneblog_justauth_三方登录配置【Gitee】
  • 33- PyTorch实现分类和线性回归 (PyTorch系列) (深度学习)
  • C++基础——Ubuntu下编写C++环境配置总结(C++基本简介、Ubuntu环境配置、编写简单C++例程)
  • 项目管理中,导致进度失控的五种错误
  • C# 中的abstract和virtual
  • 第六十周总结——React数据管理
  • Springboot之@Async异步指定自定义线程池使用
  • 视频知识点(23)- TS格式详解指南
  • linux篇【16】:传输层协议<后序>