获取应用列表权限的适配说明更新时间: 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
文档内容是否有帮助?
有帮助
无帮助