Android13 添加运行时权限

在一些场景下,需要给app 添加运行时权限,这样就不需要在使用的时候再去点击授权。
直接上代码:

--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -925,6 +925,45 @@ final class DefaultPermissionGrantPolicy {String commonServiceAction = "android.adservices.AD_SERVICES_COMMON_SERVICE";grantPermissionsToSystemPackage(pm, getDefaultSystemHandlerServicePackage(pm,commonServiceAction, userId), userId, NOTIFICATION_PERMISSIONS);
+         // For custom pkg
+        grantPermissionsToCustomApp(pm, PCK_NAME_QMMI, userId);
+        grantPermissionsToCustomApp(pm, PCK_NAME_SNAPDRAGON_CAMERA, userId);
+    }
+
+    // custom app add default package
+    private static final String PCK_NAME_QMMI = "com.qualcomm.qti.qmmi";
+    //骁龙照相机(厂测应用会调用起骁龙相机进行拍照测试)
+    private static final String PCK_NAME_SNAPDRAGON_CAMERA = "org.codeaurora.snapcam";
+
+
+  /**
+    *  给定制的应用授予一些权限
+    */
+    private void grantPermissionsToCustomApp(PackageManagerWrapper pm , String packageName , int userId ){
+        Log.i("Custom", "Granting permissions to " + packageName + " for user " + userId );
+        try{
+            PackageInfo customPackage = pm.getPackageInfo(packageName);
+
+            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
+
+                Set<String> permissions = new ArraySet<>();
+                for (String permission : customPackage.requestedPermissions) {
+                    final PermissionInfo perm = pm.getPermissionInfo(permission);
+                    if (perm == null) {
+                        continue;
+                    }
+                    if (perm.isRuntime()) {
+                        Log.i("Custom", packageName + " need Runtime permission : " + permission );
+                        permissions.add(permission);
+                    }
+                }
+                if (!permissions.isEmpty()) {
+                    grantRuntimePermissions(pm,customPackage, permissions, false, userId);
+                }
+            }
+        }catch(Exception e) {
+            e.printStackTrace();
+        }}

grantPermissionsToCustomApp 方法添加在grantDefaultSystemHandlerPermissions方法末尾就OK了
这个改动单编没生效,需整编验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp展示本地pdf + 自定义标题

概要 本文主要讲述uniapp打包的Android项目如何展示本地的PDF文件&#xff0c;并设置标题 需求分析 1、因为是打包的Android项目展示本地的PDF文件&#xff0c;首先需要拿到这个本地的PDF文件路径 2、如何在uniapp的vue页面中展示PDF&#xff0c;因为没有直接展示PDF文件的…

探讨Node.js生态中的npm与npx工具

在Node.js生态中&#xff0c;npm和npx是两个重要的工具&#xff0c;它们的功能虽然有所重叠&#xff0c;但使用场景却不同。理解它们的区别可以帮助开发者更高效地管理项目依赖与执行工具。 npm与npx的区别 npm&#xff1a;主要用于管理项目依赖。通过 npm install&#xff0…

Vue前端开发2.1 单文件组件

文章目录 一、单文件组件概念二、单文件组件构成1. 模板&#xff08;Template&#xff09;2. 样式&#xff08;Style&#xff09;3. 逻辑&#xff08;Script&#xff09; 三、单文件组件演示1. 创建Vue项目2. 启动Vue项目3. 用VS Code打开项目4. 清空样式文件代码5. 创建欢迎组…

【redis】热点key问题

【redis】热点key问题 【一】什么是热点key问题【二】什么样的key被称为热key【三】热点Key问题的危害【四】如何监控发现热点key【五】热点Key的解决方案【1】使用二级缓存【2】将热key分散到不同的服务器中【3】热key拆分【4】将核心/非核心业务做Redis的隔离 【六】业界已有…

Nature 正刊丨细菌免疫蛋白直接感知两种不同的噬菌体蛋白

01摘要 真核先天免疫系统使用模式识别受体通过检测病原体相关的分子模式来感知感染&#xff0c;然后触发免疫反应。细菌也进化出了类似的免疫蛋白&#xff0c;可以感知其病毒捕食者的某些成分&#xff0c;即噬菌体1,2,3,4,5,6。尽管不同的免疫蛋白可以识别不同的噬菌体编码的触…

log4j2.xml

log4j2.xml 1、log4j2.xml使用2、日志器的流程解析2.1、几个重要的类2.2、整体流程图 3、部分源码3.1、通过简单例子看源码3.2、log4j2.xml配置指导 如侵权&#xff0c;请联系&#xff0c;无心侵权&#xff5e; 如有错误&#xff0c;也请指正。 1、log4j2.xml使用 <?xml v…

Anaconda虚拟环境安装cuda和pytorch

首先电脑上要有Anaconda&#xff0c;使用conda创建一个虚拟环境,并激活 conda create yolov8 conda activate yolov8winR输入cmd&#xff0c;在命令窗口输入 NVIDIA-smi可以查看到自己电脑支持的cuda环境&#xff0c;如下图 再打开torch的官网 pytorch官网 查看目前支持的版…

WebSocket Secure (WSS)

使用代理浏览器时&#xff0c;WebSocket Secure (WSS) 链接失败可能由以下原因引起&#xff1a; 代理设置问题&#xff1a; 确保代理配置正确&#xff0c;包括代理地址和端口。有些代理服务器不支持WebSocket连接&#xff0c;您需要确认您的代理服务是否支持WSS。 SSL/TLS 问题…

目标检测——Cascade R-CNN算法解读

论文&#xff1a; Cascade R-CNN: Delving into High Quality Object Detection (2017.12.3) 链接&#xff1a;https://arxiv.org/abs/1712.00726 Cascade R-CNN: High Quality Object Detection and Instance Segmentation (2019.6.24) 链接&#xff1a;https://arxiv.org/abs…

Z 字形变换(6)

这道题之前一直不会做&#xff0c;明白他是什么意思&#xff0c;但是找不到方法或者方法过于繁琐 方法1&#xff1a; 这是我在力扣评论区看到的方法&#xff0c;太精彩了。 虽然我实现起来效率并不高&#xff0c;可能是我代码的问题&#xff0c;但是他的思路很巧妙。 字符串的…

Spring--1

spring是一个轻量级的&#xff0c;采用IOC与AOP编程思想的java后端开发框架&#xff0c;简化了企业级的应用开发。 Spring体系 数据访问层&#xff0c;Web层&#xff0c;配置中心&#xff0c;测试区 IOC 控制反转&#xff0c;将创建对象的控制权交由Spring框架&#xff0c;需…

音频分割:长语音音频 分割为 短语音音频 - python 实现

在做语音任务时&#xff0c;有是会用到的语音音频是长音频&#xff0c;这就需要我们将长音频分割为短音频。 该示例将声音的音量和静默时间结合作为语音的分割条件。 使用音量和静默时间结合的分割条件&#xff0c;能够比较好的进行自然断句&#xff0c;不会话语没有说完就切断…

SpringBoot篇(一、认识SpringBoot)

目录 一、SpringBoot存在的意义 二、为什么要用SpringBoot 三、SpringBoot的优点 四、Spring & Spring Boot & Spring Cloud的关系 五、SpringBoot简化操作的体现 1. 创建独立的 Spring 应用程序 2. 嵌入式 servlet 容器 3. 提供 starter简化 Maven 配置 4. 自…

Spring声明式事务管理:深入探索XML配置方式

前言 Spring的事务管理&#xff0c;无论是基于xml还是注解实现&#xff0c;本质上还是实现数据库的事务管理机制&#xff0c;因此要注意发送SQL的连接是否为同一个&#xff0c;这是实现声明式事务的关键。 以下案例和实现基于SSM整合框架完成&#xff0c;不知道如何整合SSM&…

【K8S系列】Kubernetes Pod 状态详细介绍及异常状态解决方案

在 Kubernetes 中&#xff0c;Pod 是最小的可调度单元&#xff0c;负责运行一个或多个容器。Pod 的状态能够反映其生命周期中的不同阶段&#xff0c;帮助用户了解当前的运行状况。本文将详细介绍 Kubernetes Pod 的各种状态及其可能的异常状态解决方案。 一、Pod 状态概览 Po…

在Docker中快速使用各个版本的Oracle数据库(10g、11g、12c、18c、19c、21c、23c)

镜像地址 各个版本的Oracle数据库环境&#xff0c;下载地址如下&#xff1a; # oracle nohup docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle23cfree:1.0 & nohup docker pull registry.cn-hangzhou.aliyuncs.com/lhrbest/oracle21c_ee_db_21.3.0.0 &…

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言&#xff0c;树高的规律&#xff1a; 高度为h的平衡二叉树的含有的最少结点数&#xff08;所有非叶节点的平衡因子均为1&#xff09;&#xff1a; n01&#xff0c;n11&#xff0c;n22 含有的最多结点数&#xff1a; (高度为h的满二叉树含有的结点数) ②…

Flutter在 iOS 中实现无弹窗获取剪切板内容

前言 在最新的项目需求中&#xff0c;我们需要在获取剪切板内容时避免弹出授权提示。这一功能是基于竞品的实现&#xff0c;旨在优化用户体验&#xff0c;特别是在推广获取跳转链接的场景下非常有用。 解决方案 通过查阅资料&#xff0c;我们发现对于 iOS 16 及以上的系统&a…

Fusion创建一个简单的api脚本文件

我的Fusion版本&#xff1a;Fusion 2.0.20476 x86_64 脚本模块在实用程序->附加模型->脚本和附加模块&#xff0c;快捷键为shifts 里面有一些演示脚本&#xff0c;可以直接使用 也可以自己创建一个新的脚本 创建的脚本在此处—— 选择脚本文件&#xff0c;点击编辑&a…

Unity Mirror NetworkManager初识

文章目录 Network Manager网络管理器什么是网络管理器&#xff1f;通过Transports进行定制化网络连接管理自定义连接地址和端口号Game State Management游戏状态管理Network Manager HUD玩家预制体及其生成控制Spawn Prefabs其他预制体注册Scene Management场景管理 Network Ma…