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

Android 默认打开应用的权限

有项目需要客户要安装第三方软件,但是要手动点击打开权限,就想不动手就打开。

//安装第三方软件,修改方式

frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java

//找到如下源码:

//有三种方式,但是只有1 或 3 ,两种方式有用


    // Now that we successfully installed the package, grant runtime
    // permissions if requested before broadcasting the install. Also
    // for legacy apps in permission review mode we clear the permission
    // review flag which is used to emulate runtime permissions for
    // legacy apps.
    if (grantPermissions) {
        final int callingUid = Binder.getCallingUid();
        mPermissionManager.grantRequestedRuntimePermissions(
                res.pkg, res.newUsers, grantedPermissions, callingUid);
    }
    
    //如下修改
    if (packageName.equals("com.android.test")) {
        final int callingUid = Binder.getCallingUid();
        
        //1 该方法打开所有请求的权限
        mPermissionManager.grantRequestedRuntimePermissions(
                res.pkg, res.newUsers, grantedPermissions, callingUid);
        
        //2 该方法似乎不起作用
        //grantRuntimePermission(packageName,"android.permission.SYSTEM_OVERLAY_WINDOW",res.uid);
        //grantRuntimePermission(packageName,"android.permission.SYSTEM_ALERT_WINDOW",res.uid);
        //grantRuntimePermission(packageName,"android.permission.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION",res.uid);
        
        //3 只打开一个 SYSTEM_ALERT_WINDOW 权限
        AppOpsManager mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
        mAppOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
            res.uid, packageName,AppOpsManager.MODE_ALLOWED);
    }
   

//内置应用权限修改方式:

frameworks\base\services\core\java\com\android\server\pm\permission\DefaultPermissionGrantPolicy.java

private void grantDefaultSystemHandlerPermissions(PackageManagerWrapper pm, int 
userId) {

//末尾加入

grantMyPermissions(pm, "com.android.test", userId);

}

private void grantMyPermissions(PackageManagerWrapper pm,String pkg,int userId){Log.i(TAG,"other package Permissions");PackageInfo pkginfo = pm.getPackageInfo(pkg);if(pkginfo==null){return;}Set<String> permissions = new ArraySet<>();permissions.add("android.permission.SYSTEM_OVERLAY_WINDOW");permissions.add("android.permission.SYSTEM_ALERT_WINDOW");permissions.add("android.permission.WRITE_EXTERNAL_STORAGE");permissions.add("android.permission.READ_EXTERNAL_STORAGE");grantRuntimePermissions(pm,pkginfo, permissions,false, userId);
}

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

相关文章:

  • 2023年广东工业大学腾讯杯新生程序设计竞赛
  • FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
  • SpringCloud | Dubbo 微服务实战——注册中心详解
  • PostGIS学习教程十一:投影数据
  • jQuery ajax读取本地json文件 三级联动下拉框
  • Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版(视频笔记)
  • 深度学习实战66-基于计算机视觉的自动驾驶技术,利用YOLOP模型实现车辆区域检测框、可行驶区域和车道线分割图
  • Stable Diffusion 系列教程 - 1 基础准备(针对新手)
  • 听GPT 讲Rust源代码--src/tools(8)
  • Linux硬链接和软连接是什么?
  • LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
  • VS2015编译GDAL3.2.0+opencl+C#
  • 3、Linux_系统用户管理
  • C语言指针详解上
  • 力扣面试150题 | 27.移除元素
  • JAVA 通过get,post访问远程接口
  • Spark例子
  • linux下ls和df卡死
  • iOS(swiftui)——系统悬浮窗( 可在其他应用上显示,可实时更新内容)
  • css弹窗动画效果,示例弹窗从底部弹出
  • STM32CubeIDE(CUBE-MX hal库)----RTC时钟,时钟实时显示
  • ubuntu 安装Nvidia驱动
  • 『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建PG开源数据库
  • 【开题报告】基于J2EE的高校水电费管理系统的设计与实现
  • Revisiting Proposal-based Object Detection阅读笔记
  • Docker部署NFS服务
  • 深度学习TensorFlow2基础知识学习后半部分
  • 电脑系统重装Win10专业版操作教程
  • 打包Python项目
  • 使用Python实现爬虫IP负载均衡和高可用集群