设备上是否已配置工作配置文件?
如果是这样,是我的应用程序拥有个人资料吗?如果不是,哪个应用程序可以?
此代码在主要用户下运行时将起作用。主要用户的个人资料所有者将是工作资料。如果您的应用程序拥有它,它将记录您自己的包。
DevicePolicyManager manager =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
List<ComponentName> activeAdmins = manager.getActiveAdmins();
if (activeAdmins != null){
for (ComponentName admin : activeAdmins){
String packageName = admin.getPackageName();
if (manager.isProfileOwnerApp(packageName)){
Log.d(TAG, "Work Profile is: " + packageName);
}
}
}
如果您只想检查您的应用是否是您应用中的个人资料所有者,请使用此选项。
manager.isProfileOwnerApp(getApplicationContext().getPackage());
工作资料是否处于活动状态?
如果 isProfileOwnerApp() 为主要用户下的任何包返回 true,则工作配置文件处于活动状态并由该包拥有。
也可以在支持多用户的设备上为二级用户配置配置文件所有者,但我还没有看到 EMM 实现了这一点。设备所有者需要将您的包的组件分配为辅助用户的配置文件所有者,因此可以肯定地说这不会发生。但如果是这样,您的应用程序应该像工作资料一样工作,但在辅助用户的上下文中作为托管资料。
* 编辑(6/15/18)*:
我在 Android O 设备上测试了您的场景,但没有得到相同的行为。从 TestDPC 配置工作配置文件后,TestDPC 检测到已配置托管配置文件并且不允许我再次配置。
你正在开发什么版本的Android?
我深入研究了 TestDPC 并找到了一些针对您的场景进行了修改的代码,这可能会对您有所帮助。不幸的是,对于 Android M 及更低版本,TestDPC 不会检测到设备已经配置了工作配置文件,只会再次尝试。此外,我没有找到一种方法来检测该个人资料所有者是谁,您的应用程序或其他应用程序。但我希望这会有所帮助!
/**
* @param context Calling activity's context
* @return true, if work profile provisioning is allowed
*/
@TargetApi(Build.VERSION_CODES.N)
public static boolean isProvisioningAllowed(Context context) {
if (BuildCompat.isAtLeastN()) {
DevicePolicyManager dpm = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
return dpm.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE);
}
else {
return true;
}
}