一、背景根据《YD/T 2407-2021移动智能终端安全能力技术要求》,我们将于2023年5月 从新版本开始逐步将权限默认值改为拒绝或询问,在无权限的情况下,不能直接返回应用列表,只能获取调用方应用的信息,参考《T/TAF 108-2022 移动终端应用软件列表权限实施指南》,希望开发者及时检查适配。
二、获取应用列表权限“获取应用列表”权限是在Android原生QUERY_ALL_PACKAGES权限基础上额外的权限管理。
应用获取设备上的应用软件列表前,需向用户进行告知并获得用户同意。应用可通过适配获取应用列表权限弹窗,获得用户同意。否则只能通过引导用户至权限管理页面调整相关权限。
1、管控接口PackageManager#getInstalledPackages
PackageManager#getInstalledPackagesAsUser
PackageManager#getInstalledApplications
PackageManager#getInstalledApplicationsAsUser
2、适配方法清单文件声明
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、特殊说明如果不需要系统添加获取应用列表的权限,可以通过下面代码实现(同时,清单文件中不能申请更改权限)
4、MIUI生效版本MIUI 13 及以上系统版本
三、更多相关说明“应用软件列表信息”获取说明及适配指南
四、联系我们如您有任何技术问题,请联系miui-security-open@xiaomi.com