获取应用列表权限的适配说明更新时间: 2024-09-25 16:42:00

一、背景

根据YD/T 2407-2021移动智能终端安全能力技术要求》,我们将于2023年5月 从新版本开始逐步将权限默认值改为拒绝或询问,在无权限的情况下,不能直接返回应用列表,只能获取调用方应用的信息,参考《T/TAF 108-2022 移动终端应用软件列表权限实施指南》,希望开发者及时检查适配

二、获取应用列表权限

“获取应用列表”权限是在Android原生QUERY_ALL_PACKAGES权限基础上额外的权限管理。

应用获取设备上的应用软件列表前,需向用户进行告知并获得用户同意。应用可通过适配获取应用列表权限弹窗,获得用户同意。否则只能通过引导用户至权限管理页面调整相关权限。

1、管控接口

PackageManager#getInstalledPackages

PackageManager#getInstalledPackagesAsUser

PackageManager#getInstalledApplications

PackageManager#getInstalledApplicationsAsUser

2、适配方法

清单文件声明

<uses-permission android:name="com.android.permission.GET_INSTALLED_APPS"/>


判断MIUI 是否支持动态申请权限

try {
PermissionInfo permissionInfo = getApplicationContext().getPackageManager().getPermissionInfo("com.android.permission.GET_INSTALLED_APPS", 0);
if (permissionInfo != null && permissionInfo.packageName.equals("com.lbe.security.miui")) {
//MIUI 系统支持动态申请该权限
if (ContextCompat.checkSelfPermission(getApplicationContext(), "com.android.permission.GET_INSTALLED_APPS") != PackageManager.PERMISSION_GRANTED) {
//没有权限,需要申请
ActivityCompat.requestPermissions(MainActivity.this, new String[]{"com.android.permission.GET_INSTALLED_APPS"}, 999);
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}

判断权限授予结果(与普通运行时权限没有区别)

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// do something
}

3、特殊说明

如果不需要系统添加获取应用列表的权限,可以通过下面代码实现(同时,清单文件中不能申请更改权限)

<meta-data
android:name="do_not_need_get_installed_apps"
android:value="true"/>

注意:如果声明此meta-data,等于“获取应用列表”权限关闭!

4、MIUI生效版本

MIUI 13 及以上系统版本

三、更多相关说明

“应用软件列表信息”获取说明及适配指南

四、联系我们

如您有任何技术问题,请联系miui-security-open@xiaomi.com

文档内容是否有帮助?
有帮助
无帮助