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);
}
相关推荐
IT毕设实战小研16 分钟前
基于大数据的国内主要农作物产量趋势分析与可视化
android·java·大数据·django·课程设计
企业数字化笔记2 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
龙之叶2 小时前
Android出海系列-GMS认证介绍
android
潮族大Z2 小时前
Android性能优化:启动、内存、卡顿的一站式排查手册
android
事圆则缓3 小时前
从suspend字节码到 Retrofit 协程桥:挂起函数识别与恢复
android·retrofit
杉氧5 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
Coffeeee5 小时前
claude-video 一个让你的Agent拥有看视频能力的Skill
android·人工智能·aigc
菜鸟~noob2336 小时前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
样子20186 小时前
Js 之根据白名单过滤 HTML(防止 XSS 攻击)
android·前端·javascript·html·xss
InsightCore6 小时前
别再往 Skill 里塞一切:我们如何重新思考 AI Debug Engineer
android·debug