Android 8.1.0 源码修改之 - 给自己预置到系统的预置应用添加一些默认权限

        因为项目中需要预置很多第三方应用,每当刷机完成之后,这些第三方应用进程只要启动,就会弹一些弹窗请求权限(比如某度输入法需要定位权限、读取联系人、访问SD卡等等权限,暂且不说他们是不是没必要请求这些权限,当系统启动起来弹一些这些东西,用户体验很不好。所以当前需要把这些权限的东西都给他们默认赋上,优化用户体验)。基于以上,我们需要在预置这些应用到系统之后,在framework对应的包中做一些修改。

        其实只需要修改一个类就可以了,这个包所在的位置:

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

        首先找到这个类的方法 grantDefaultSystemHandlerPermissions(int userId) ,看这个方法的名字就很清楚了,这个方法是给系统默认的应用(用户)授权的。那在这个方法中命名并添加我们自己的方法  grantPermissionsToCustomApp(int userId),并模仿这个方法中授权的方式,给我们自己的应用授权:

    //声明百度输入法的包名
    private static final String PCK_NAME_BAIDU_INPUT = "com.baidu.input";

    /**
    *
    *给自己的自定义的应用授予一些权限
    */
    private void grantPermissionsToCustomApp(int userId){
        try{
            //add permission to baidu input method.
            PackageParser.Package customPackage = getPackageLPr(PCK_NAME_BAIDU_INPUT);

            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
                grantRuntimePermissionsLPw(customPackage, LOCATION_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, STORAGE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, CONTACTS_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, PHONE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, MICROPHONE_PERMISSIONS, userId);}
           
            
        }catch(Exception e) {
            e.printStackTrace();
        }
    }

        这样就给了当前 user (默认的是 owner。其实只要是在这里授予了权限,其他无论 owner 创建其他的什么访客或者什么 user,在开机之后,这个预置应用都被授予了一些权限了)设置了这个应用所需的一些权限,优化了用户体验。

        当然有一点需要注意,这个方法要放到 grantDefaultSystemHandlerPermissions(int userId) 的    mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); 方法之前调用执行。

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值