Android 默认赋予运行时权限

 在进行系统定制时,内置应用会要求各式各样运行时权限,例如拨打电话和管理通话权限

为了避免用户没有留意而拒绝了应用的关键权限,我们必须对用户授权时的各种状态进行详细的分析。

用户在授予权限时存在三种状态:

允许—授权成功,授权结束。
拒绝—授权失败,下次申请仍会弹出提示框。如果权限是程序必须拥有的,则需要再次申请。
拒绝&不再询问—拒绝一次后,下次会有该提示。若选择拒绝并且不再询问,下次申请则不会弹出提示框。如果权限是程序必须拥有的,则需要用户到应用管理中手动设置。

对于内置应用,客户希望不会弹出这些东西,而且一旦错过允许就不会再次弹出,比较影响客户体验,所以我在PackageManagerService里自定义了一个方法,这个方法可以在应用解压的时候就赋予运行时权限.

   private void grant3rdPermissionsToApps(int userId) {//lei add
        synchronized (mPackages) {
            final int packageCount = mPackages.size();
            for (int i = 0; i < packageCount; i++) {
                PackageParser.Package pkg = mPackages.valueAt(i);
                if (!(pkg.mExtras instanceof PackageSetting)) {
                    continue;
                }
                if (pkg.requestedPermissions.isEmpty()) {
                    Log.i(TAG, "Skip package " + pkg.packageName);
                    continue;
                }
                for (String permission : pkg.requestedPermissions) {
                    BasePermission bp = mSettings.mPermissions.get(permission);
                    if (bp != null && bp.isRuntime()){
                        grantRuntimePermission(pkg.packageName, permission, userId);
                    }
                }
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/lancelots/article/details/89327310