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

安卓14默认赋予应用权限

安卓14上赋予应用默认权限的方式跟之前的不太一样了

需要修改两个地方,一个是frameworks\base\services\core\java\com\android\server\pm\permission\Permission.java

    public boolean isNormal() {//eturn (mPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)//       == PermissionInfo.PROTECTION_NORMAL;return true;}public boolean isRuntime() {//return (mPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)//        == PermissionInfo.PROTECTION_DANGEROUS;return false;}

这里也可以加上通过packagename白名单模式过滤,我没这个需求,所以直接全部通过,这个改好后应用其实就安装完成后就有权限了,

但是有一些应用在第一次打开时还会弹ReviewPermissionsActivity这个界面,如果需求没有说要处理这个情况的话,下面的就不用管了

所以我们对这个界面做处理,首先在packages\modules\Permission\PermissionController\src\com\android\permissioncontroller\permission\ui\handheld\ReviewPermissionsFragment.java这个界面处理继续按钮时,注释调关闭的代码,因为结合前面的赋予权限,应用已经有权限了, 只要不去取消即可,这个时候即使用户点了关闭权限也不会生效

    private void confirmPermissionsReview() {
...if (permPreference.getState().and(PermissionTarget.PERMISSION_FOREGROUND)!= PermissionTarget.PERMISSION_NONE.getValue()) {KotlinUtils.INSTANCE.grantForegroundRuntimePermissions(app, group);}if (permPreference.getState().and(PermissionTarget.PERMISSION_BACKGROUND)!= PermissionTarget.PERMISSION_NONE.getValue()) {KotlinUtils.INSTANCE.grantBackgroundRuntimePermissions(app, group);}if (permPreference.getState() == PermissionTarget.PERMISSION_NONE) {Log.i("test","app:" + app + " permission group:" + group + " bypass");//KotlinUtils.INSTANCE.revokeForegroundRuntimePermissions(app, group);//KotlinUtils.INSTANCE.revokeBackgroundRuntimePermissions(app, group);}
...

然后为了优化体验,在权限回调里面直接模拟用户点击了继续按钮onClick(mContinueButton);

        mViewModel.getPermissionGroupsLiveData().observe(this,(Map<String, LightAppPermGroup> permGroupsMap) -> {if (getActivity().isFinishing()) {return;}if (permGroupsMap.isEmpty()) {//If the system called for a review but no groups are found, this means// that all groups are restricted. Hence there is nothing to review// and instantly continue.confirmPermissionsReview();executeCallback(true);activity.finishAfterTransition();} else {bindUi(permGroupsMap);loadPreferences(permGroupsMap);onClick(mContinueButton);}});

这样就不会弹窗了

相关文章:

  • 封装 element-ui 二次弹框
  • Execl 最佳字体和大小推荐[特殊字符]
  • 2025年【安全员-C证】考试试卷及安全员-C证模拟考试
  • 《TCP/IP详解 卷1:协议》之第六章:ICMP:Internet控制报文协议
  • AUTODL关闭了程序内存依然占满怎么办
  • 【氮化镓】同质结GaN PiN二极管的重离子单粒子烧毁SEB
  • K8S安全认证
  • C语言(1)—C语言常见概念
  • Python爬虫实战:获取豆ban网最新电影数据,为51观影做参考
  • 彩虹表攻击与Nest密码存储
  • 一些基本的 Vue 规范
  • NEUOJ网格路径
  • 变量在template里不好使,在setup好使?
  • 从并发问题衍生出的Spring的七种事务传播行为
  • 问题:raw.githubusercontent无法访问
  • 《解锁快速记忆法:开启高效学习的大门》
  • 消息中间件RabbitMQ02:账号的注册、点对点推送信息
  • 4.23学习总结
  • 如何设计一个实时数据同步方案
  • 抱佛脚之学SSM六
  • 同日哑火丢冠,双骄的下山路,手牵手一起走
  • 5月起,这些新规将施行
  • 200枚篆刻聚焦北京中轴线,“印记”申遗往事
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 浙江官宣:五一假期,没电、没气、没油车辆全部免费拖离高速