[英]Detect devices running MDM (mobile device management)
我有一个功能,可以在旧的应用程序版本中弹出应用程序更新提示对话框(该版本通过Firebase远程配置进行控制)。
然而,结果很多(但不是大多数)我的客户使用MDM来锁定他们的手机,在这种情况下,最终用户无法直接更新应用程序。
我正在使用intent.resolveActivity(packageManager)的正常检测来检查是否可以在显示对话框之前启动Play商店活动。 但该检查通过 - Play商店就在那里,但更新被阻止。
我想为这些最终用户禁用更新提示。
有没有办法检测MDM? 或者至少是一种检测应用更新被阻止的方法?
您可以使用UserManager:
UserManager user_manager = (UserManager) getSystemService(Context.USER_SERVICE);
if (user_manager.hasUserRestriction("WORK_PROFILE_RESTRICTION")) {
System.out.print("app under MDM");
} else {
System.out.print("app not under MDM");
}
虽然如果管理员没有设置该值,您将收到错误。 如果你成功了,那就意味着你肯定属于托管档案,但如果你弄错了,那就可能是假阴性。
Test DPC google示例包含一个ProvisioningStateUtil ,其中包含一些实用程序方法:
/**
* @return true if the device or profile is already owned
*/
public static boolean isManaged(Context context) {
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
List<ComponentName> admins = devicePolicyManager.getActiveAdmins();
if (admins == null) return false;
for (ComponentName admin : admins) {
String adminPackageName = admin.getPackageName();
if (devicePolicyManager.isDeviceOwnerApp(adminPackageName)
|| devicePolicyManager.isProfileOwnerApp(adminPackageName)) {
return true;
}
}
return false;
}
这需要至少Android 5.0(API 21)
您还可以直接检查是否允许当前用户安装或更新应用程序:
UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
boolean blocked = userManager.hasUserRestriction(UserManager.DISALLOW_INSTALL_APPS);
它还需要API 21
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.