为什么在设置所有者设备应用程序时无法创建受限配置文件?

Why can't I create a restricted profile when an owner device app is set?

我最近注意到,如果设置了 Device Owner 应用程序,则无法创建受限配置文件。

第一种情况:当我的设备所有者应用未设置时
设置>用户:我可以"Add user or Profile",然后在用户受限配置文件

第二种情况:当我的设备所有者应用设置时
设置>用户:我只能"Add user",然后我得到创建新用户的确认。在第二种情况下,无法创建受限个人资料。

我想知道为什么它在这种情况下不可用,以及在这种情况下如何创建受限配置文件?
我的问题的第二部分是:如何使用现有的 DevicePolicyManager API(据我所知,没有 public API 以编程方式创建受限配置文件 - 或等效行为创建受限配置文件)?

更新: 我制作了一个示例应用程序来说明这一点。它在 Github.

上可用

重现步骤

受限配置文件不适用于拥有设备所有者的平板电脑或手机。它显示在可用的设置应用程序源代码中 here :

DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
                Context.DEVICE_POLICY_SERVICE);
// No restricted profiles for tablets with a device owner, or phones.
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) {
    mCanAddRestrictedProfile = false;
    mAddUser.setTitle(R.string.user_add_user_menu);
}

所以这不是错误,而是功能。它可能被禁用以避免干扰您的 Device Owner App。 你应该意识到这一点,因为你的设备所有者应用程序有更多的权力,这意味着你必须自己限制你的用户使用这个设备所有者应用程序。

为此,您可以使用 DevicePolicyManager.addUserRestriction()DevicePolicyManager.setGlobalSetting()DevicePolicyManager.setSecureSetting() 提供的所有限制 API 来配置设置,也可以 DevicePolicyManager.setApplicationHidden()限制您的用户的应用程序访问权限。

Why can't I create a restricted profile when an owner device app is set?

可能是因为设备所有者应用程序已经在管理配置文件。我想在不绕过设备所有者应用程序限制的情况下这样做更容易。

How can I programmatically create a restricted profile?

方法 DevicePolicyManager.createAndInitializeUser() 可用于创建受管理的配置文件。此配置文件无法在设置中直接管理,但设备所有者应用程序可以访问几乎相同的功能。

我找不到的一个功能是能够共享应用程序从所有者配置文件到管理的应用程序。