文章目录

  • 开发平台基本信息
  • 问题描述
  • 解决方法

开发平台基本信息

芯片: SDM450
版本: Android 9.0
kernel: msm-4.9

问题描述

设备在进行入网认证的时候,实验室要求应用在使用特殊权限的时候,需要告知用户,要用户授权才能使用相应的权限;Android需要申请的危险权限,是以组的形势申请的,比如说,拨打电话、读取通话记录、写入通话记录都是属于电话权限分组;而在入网认证的时候,实验室要求这些权限组要拆分为单独的权限,每个权限就是独立的,不再是以组的形势。

解决方法

diff --git a/packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
old mode 100644
new mode 100755
index 05e46fd..f6e9233
--- a/packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -24,12 +24,17 @@ import android.app.AlertDialog;import android.app.Fragment;import android.content.Context;import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.PermissionInfo;import android.graphics.drawable.Drawable;
+import android.Manifest;import android.net.Uri;
+import android.widget.Switch;import android.os.Bundle;import android.preference.Preference;import android.preference.Preference.OnPreferenceChangeListener;
@@ -43,7 +48,9 @@ import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;
-import android.widget.Switch;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;import android.widget.Toast;import com.android.packageinstaller.R;
@@ -73,6 +80,7 @@ public final class AppPermissionsFragment extends SettingsWithHeaderprivate PreferenceScreen mExtraScreen;private boolean mHasConfirmedRevoke;
+    String mPackageName;public static AppPermissionsFragment newInstance(String packageName) {return setPackageName(new AppPermissionsFragment(), packageName);
@@ -95,9 +103,9 @@ public final class AppPermissionsFragment extends SettingsWithHeaderab.setDisplayHomeAsUpEnabled(true);}-        String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+        mPackageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);Activity activity = getActivity();
-        PackageInfo packageInfo = getPackageInfo(activity, packageName);
+        PackageInfo packageInfo = getPackageInfo(activity, mPackageName);if (packageInfo == null) {Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show();activity.finish();
@@ -255,6 +263,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader}}preference.setPersistent(false);
+            preference.setChecked(group.areRuntimePermissionsGranted());if (isPlatform) {screen.addPreference(preference);
@@ -264,6 +273,33 @@ public final class AppPermissionsFragment extends SettingsWithHeader}mExtraScreen.addPreference(preference);}
+           // if (AppPermissionGroup.isStrictOpEnable() && isPlatform) {+                try {+                    if (!group.getName().equals(Manifest.permission_group.STORAGE)) {+                        PackageManager pm = context.getPackageManager();
+                        for (Permission permission : group.getPermissions()) {+                            PermissionInfo perm = pm.getPermissionInfo(permission.getName(), 0);
+                            final String[] filterPermissions = new String[]{permission.getName()};
+                         //   if (perm.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) {+                                SwitchPreference preference_permission = new SwitchPreference(context);
+                                preference_permission.setOnPreferenceChangeListener(this);
+                                preference_permission.setKey(permission.getName());
+                                preference_permission.setTitle(perm.loadLabel(pm));
+                                preference_permission.setPersistent(false);
+                                preference_permission.setEnabled(true);
+                                AppPermissionGroup permissionGroup = getPermisssionGroup(perm.group);
+                                preference_permission.setChecked(
+                                        permissionGroup.areRuntimePermissionsGranted(filterPermissions));
+                                screen.addPreference(preference_permission);
+                          //  } else if (perm.protectionLevel == PermissionInfo.PROTECTION_NORMAL) {+                            //    continue;
+                           // }
+                        }
+                    }
+                } catch (NameNotFoundException e) {+                    Log.e(LOG_TAG, "Problem getting package info for " + mPackageName, e);
+                }
+            //}}if (mExtraScreen != null) {@@ -289,12 +325,79 @@ public final class AppPermissionsFragment extends SettingsWithHeadersetLoading(false /* loading */, true /* animate */);}+    private AppPermissionGroup getPermisssionGroup(String group) {+        for (AppPermissionGroup mGroup : mAppPermissions.getPermissionGroups()) {+            if (group.equals(mGroup.getName())) {+                return mGroup;
+            }
+        }
+        return null;
+    }
+
+    private void updateEveryPermissionPreference(AppPermissionGroup group) {+        if (group.getName().equals(Manifest.permission_group.STORAGE)) return;
+        PackageManager pm = getContext().getPackageManager();
+        PreferenceScreen screen = getPreferenceScreen();
+        for (Permission permission : group.getPermissions()) {+            Preference permission_preference
+                    = screen.findPreference((CharSequence) permission.getName());
+            try {+                PermissionInfo permInfo = pm.getPermissionInfo(permission.getName(), 0);
+                AppPermissionGroup permissionGroup = getPermisssionGroup(permInfo.group);
+                final String[] filterPermissions = new String[]{permission.getName()};
+                ((SwitchPreference) permission_preference).setChecked(
+                        permissionGroup.areRuntimePermissionsGranted(filterPermissions));
+            } catch (NameNotFoundException e) {+                Log.e(LOG_TAG, "Failed to update permission_preference", e);
+            }
+        }
+    }
+@Overridepublic boolean onPreferenceChange(final Preference preference, Object newValue) {-        String groupName = preference.getKey();
-        final AppPermissionGroup group = mAppPermissions.getPermissionGroup(groupName);
+        String key = preference.getKey();
+        final String[] filterPermissions = new String[]{key};
+        final AppPermissionGroup group = mAppPermissions.getPermissionGroup(key);
+        PackageManager pm = getContext().getPackageManager();if (group == null) {+            //if (AppPermissionGroup.isStrictOpEnable()) {+                try {+                    PermissionInfo permInfo = pm.getPermissionInfo(key, 0);
+                    final AppPermissionGroup title_group
+                            = mAppPermissions.getPermissionGroup(permInfo.group);
+                    final boolean grantedByDefault = title_group.hasGrantedByDefaultPermission();
+                    PreferenceScreen screen = getPreferenceScreen();
+                    Preference group_preference = screen.findPreference((CharSequence) permInfo.group);
+                    AppPermissionGroup permissionGroup = getPermisssionGroup(permInfo.group);
+                    if (newValue == Boolean.TRUE) {+                        ((SwitchPreference)preference).setChecked(true);
+                        title_group.grantRuntimePermissions(false, filterPermissions);
+                        ((SwitchPreference) group_preference).setChecked(
+                                permissionGroup.areRuntimePermissionsGranted());
+                    } else {+                        //When the permission is off, the application maybe will crash, so need to
+                        //add a warning dialog when the user revoke the permission.
+                        new AlertDialog.Builder(getContext())
+                                .setMessage(grantedByDefault ? R.string.system_warning
+                                        : R.string.old_sdk_deny_warning)
+                                .setNegativeButton(R.string.cancel, null)
+                                .setPositiveButton(R.string.grant_dialog_button_deny_anyway,
+                                        new OnClickListener() {+                                    @Override
+                                    public void onClick(DialogInterface dialog, int which) {+                                        ((SwitchPreference) preference).setChecked(false);
+                                        title_group.revokeRuntimePermissions(false, filterPermissions);
+                                        ((SwitchPreference) group_preference).setChecked(
+                                                permissionGroup.areRuntimePermissionsGranted());
+                                    }
+                                })
+                                .show();
+                    }
+                } catch (NameNotFoundException e) {+                    Log.e(LOG_TAG, "Problem getting package info for ", e);
+                }
+          //  }return false;}

[高通SDM450][Android9.0]CTA认证--拆分申请权限分组相关推荐

  1. [高通SDM450][Android9.0]CTA认证--Android6.0以下应用默认不授权

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,实验室要求应 ...

  2. [高通SDM450][Android9.0]CTA认证--去除某些应用开机使用定位权限

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证,实验室在测试的时候 ...

  3. [高通SDM450][Android9.0]CTA认证--去掉彩信、短信、通话功能

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 与去掉录音功能同理,设备在进行入网认证 ...

  4. [高通SDM450][Android9.0]CTA认证--去掉录音功能

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,公司为了尽快 ...

  5. [高通SDM450][Android9.0]CTA认证--去掉GPS功能

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 与去掉录音功能同理,设备在进行入网认证 ...

  6. [高通SDM450][Android9.0]屏幕显示DPI可动态配置

    文章目录 开发平台基本信息 问题描述 解决方法 去除默认dpi限制 开发平台基本信息 芯片: 高通SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 正常我们要修改 ...

  7. [高通SDM450][Android9.0]屏蔽开放WIFi以及WIFI信号有个x导致无法上网

    文章目录 开发平台基本信息 问题描述 解决方法 1.解决WIFI信号有个x的问题 2.屏蔽开放WIFi 开发平台基本信息 芯片: 高通SDM450 版本: Android 9.0 kernel: ms ...

  8. [高通SDM450][Android9.0]刷机后RTC时钟不生效问题

    文章目录 开发平台基本信息 问题描述 解决方法 1.写入RTC时钟添加增加开机广播 开发平台基本信息 芯片: 高通SDM450 版本: Android 9 kernel: msm-4.19 问题描述 ...

  9. [高通SDM450][Android9.0]adb无法进行remount的解决方案

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 在调试开发的时候,执行remount可 ...

最新文章

  1. input 默认样式的修改
  2. 绕开bug的feed_dict,用自己的数据集训练DCGAN
  3. 部署harbor1.2.0开启ldap验证
  4. mysql count or null_sql 语句中count()有条件的时候为什么要加上or null
  5. Linux apt命令
  6. Java @Override注解
  7. input上报流程分析【转】
  8. Go中error类型的nil值和nil
  9. viper4android使用时,ViPER4Android 目前进度 [11-21,13时16分]
  10. L298N电机驱动模块《转》。
  11. EURAKA入门实例1
  12. android 4.0.3固件,OPPO Find3 android 4.0固件正式发布
  13. PHP学习路线图(2021年最新版)
  14. 每个人都应该具备点批判性思维
  15. 论文-Estimation–Action–Reflection: Towards Deep Interaction Between Conversational and Recommender Sys
  16. Meta拟裁撤Instagram伦敦员工 其余人将调往美国---转自百度新闻|财联社
  17. 【RDMA】19. RDMA之iWARP Soft-iWARP
  18. 【计算机毕业设计】双月湾亲子高端酒店网站
  19. ClickHouse MergeTree二级索引/跳数索引
  20. 阅读《人类简史》-- 1.认知革命

热门文章

  1. 科技爱好者周刊(第 160 期):中年码农的困境
  2. PLG软件的运行环境设置
  3. I.MX6U 0411简介
  4. x1c 语言设置,创新经典平衡点 ThinkPad X1Carbon评测
  5. linux 阿波罗 计划,linux下搭建阿波罗分布式配置中心
  6. 华米科技:庇佑之下,黄汪难设温柔乡
  7. flutter doctor --android-licenses
  8. 关于《学编程,还有必要上大学吗? 》
  9. 快速乘-在乘法溢出的边缘疯狂试探
  10. Axure RP Chrome插件安装