[高通SDM450][Android9.0]CTA认证--拆分申请权限分组
文章目录
- 开发平台基本信息
- 问题描述
- 解决方法
开发平台基本信息
芯片: 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认证--拆分申请权限分组相关推荐
- [高通SDM450][Android9.0]CTA认证--Android6.0以下应用默认不授权
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,实验室要求应 ...
- [高通SDM450][Android9.0]CTA认证--去除某些应用开机使用定位权限
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证,实验室在测试的时候 ...
- [高通SDM450][Android9.0]CTA认证--去掉彩信、短信、通话功能
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 与去掉录音功能同理,设备在进行入网认证 ...
- [高通SDM450][Android9.0]CTA认证--去掉录音功能
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,公司为了尽快 ...
- [高通SDM450][Android9.0]CTA认证--去掉GPS功能
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 与去掉录音功能同理,设备在进行入网认证 ...
- [高通SDM450][Android9.0]屏幕显示DPI可动态配置
文章目录 开发平台基本信息 问题描述 解决方法 去除默认dpi限制 开发平台基本信息 芯片: 高通SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 正常我们要修改 ...
- [高通SDM450][Android9.0]屏蔽开放WIFi以及WIFI信号有个x导致无法上网
文章目录 开发平台基本信息 问题描述 解决方法 1.解决WIFI信号有个x的问题 2.屏蔽开放WIFi 开发平台基本信息 芯片: 高通SDM450 版本: Android 9.0 kernel: ms ...
- [高通SDM450][Android9.0]刷机后RTC时钟不生效问题
文章目录 开发平台基本信息 问题描述 解决方法 1.写入RTC时钟添加增加开机广播 开发平台基本信息 芯片: 高通SDM450 版本: Android 9 kernel: msm-4.19 问题描述 ...
- [高通SDM450][Android9.0]adb无法进行remount的解决方案
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 在调试开发的时候,执行remount可 ...
最新文章
- input 默认样式的修改
- 绕开bug的feed_dict,用自己的数据集训练DCGAN
- 部署harbor1.2.0开启ldap验证
- mysql count or null_sql 语句中count()有条件的时候为什么要加上or null
- Linux apt命令
- Java @Override注解
- input上报流程分析【转】
- Go中error类型的nil值和nil
- viper4android使用时,ViPER4Android 目前进度 [11-21,13时16分]
- L298N电机驱动模块《转》。
- EURAKA入门实例1
- android 4.0.3固件,OPPO Find3 android 4.0固件正式发布
- PHP学习路线图(2021年最新版)
- 每个人都应该具备点批判性思维
- 论文-Estimation–Action–Reflection: Towards Deep Interaction Between Conversational and Recommender Sys
- Meta拟裁撤Instagram伦敦员工 其余人将调往美国---转自百度新闻|财联社
- 【RDMA】19. RDMA之iWARP Soft-iWARP
- 【计算机毕业设计】双月湾亲子高端酒店网站
- ClickHouse MergeTree二级索引/跳数索引
- 阅读《人类简史》-- 1.认知革命