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

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.lryc.cn/news/465211.html

相关文章:

  • 官方操刀占用仅6G,Win 11 LTSC详细安装、优化教程来了
  • 【论文精读】RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning
  • 2023-06 GESP C++三级试卷
  • Maven--简略
  • leetcode 刷题day44动态规划Part13( 647. 回文子串、516.最长回文子序列)
  • 华为OD机试真题---关联子串
  • 【OpenAI】第二节(Token)什么是Token?如何计算ChatGPT的Token?
  • GraphRAG + Ollama + Groq 构建知识库 续篇 利用neo4j显示知识库
  • 工业以太网之战:EtherCAT是如何杀出重围的?
  • 轻量级可视化数据分析报表,分组汇总表!
  • 初始Python篇(4)—— 元组、字典
  • C#中正则表达式
  • 【python写一个带有界面的计算器】
  • K230获取单摄像头的 3 个通道图像并显示在 HDMI 显示器上
  • nginx中的HTTP 负载均衡
  • package.json 里的 dependencies和devDependencies区别
  • 【功能安全】HARA分析中的SEC如何确认
  • 阿里云Docker镜像源安装Docker的步骤
  • 得一微全资子公司硅格半导体携手广东工业大学,荣获省科学技术奖一等奖
  • @SneakyThrows不合理使用,是真的坑
  • 怎么把ppt页面切换为竖页?首推使用这个在线ppt工具!
  • 【JavaEE】——自定义协议方案、UDP协议
  • python爬虫快速入门之---Scrapy 从入门到包吃包住
  • 【Photoshop——肤色变白——曲线】
  • [python]从零开始的API调用教程
  • FFmpeg 怎样根据图片和文本生成视频
  • paddlepaddle显存未正常释放
  • websocket的使用
  • docker如何建立本地私有仓库,并将docker镜像推到私有仓库
  • vllm启动大语言模型时指定chat_template